Convert HTML string to image

后端 未结 4 743
终归单人心
终归单人心 2020-11-27 13:00

I have a string variable which holds HTML markup. This HTML markup basically represents the email content.

Now I want to create an image from this string content whi

相关标签:
4条回答
  • 2020-11-27 13:22

    Find the working code below:

    $(function() {
      $("#btnSave").click(function() {
        html2canvas($("#widget"), {
          onrendered: function(canvas) {
            theCanvas = canvas;
            document.body.appendChild(canvas);
    
            // Convert and download as image
            Canvas2Image.saveAsPNG(canvas);
            $("#img-out").append(canvas);
            // Clean up
            //document.body.removeChild(canvas);
          }
        });
      });
    });
    

    Libraries needed to include:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="html2canvas.js"></script>
    

    find the complete demo code: click here

    0 讨论(0)
  • 2020-11-27 13:28
           <!--ForExport data in iamge -->
            <script type="text/javascript">
                function ConvertToImage(btnExport) {
                    html2canvas($("#dvTable")[0]).then(function (canvas) {
                        var base64 = canvas.toDataURL();
                        $("[id*=hfImageData]").val(base64);
                        __doPostBack(btnExport.name, "");
                    });
                    return false;
                }
            </script>
    
            <!--ForExport data in iamge -->
    
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
            <script src="../js/html2canvas.min.js"></script> 
    
    
    
    
    
    <table>
                    <tr>
                        <td valign="top">
                            <asp:Button ID="btnExport" Text="Download Back" runat="server" UseSubmitBehavior="false"
                                OnClick="ExportToImage" OnClientClick="return ConvertToImage(this)" />
                            <div id="dvTable" class="divsection2" style="width: 350px">
                                <asp:HiddenField ID="hfImageData" runat="server" />
                                <table width="100%">
                                    <tr>
                                        <td>
                                            <br />
    
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Labelgg" runat="server" CssClass="labans4" Text=""></asp:Label>
                                        </td>
                                    </tr>
    
                                </table>
                            </div>
                        </td>
                    </tr>
                </table>
    
    
             protected void ExportToImage(object sender, EventArgs e)
                    {
                        string base64 = Request.Form[hfImageData.UniqueID].Split(',')[1];
                        byte[] bytes = Convert.FromBase64String(base64);
                        Response.Clear();
                        Response.ContentType = "image/png";
                        Response.AddHeader("Content-Disposition", "attachment; filename=name.png");
                        Response.Buffer = true;
                        Response.Cache.SetCacheability(HttpCacheability.NoCache);
                        Response.BinaryWrite(bytes);
                        Response.End();
    
                    }
    
    0 讨论(0)
  • 2020-11-27 13:32

    Try the following:

    using System;
    using System.Drawing;
    using System.Threading;
    using System.Windows.Forms;
    
    class Program
    {
        static void Main(string[] args)
        {
            var source =  @"
            <!DOCTYPE html>
            <html>
                <body>
                    <p>An image from W3Schools:</p>
                    <img 
                        src=""http://www.w3schools.com/images/w3schools_green.jpg"" 
                        alt=""W3Schools.com"" 
                        width=""104"" 
                        height=""142"">
                </body>
            </html>";
            StartBrowser(source);
            Console.ReadLine();
        }
    
        private static void StartBrowser(string source)
        {
            var th = new Thread(() =>
            {
                var webBrowser = new WebBrowser();
                webBrowser.ScrollBarsEnabled = false;
                webBrowser.DocumentCompleted +=
                    webBrowser_DocumentCompleted;
                webBrowser.DocumentText = source;
                Application.Run();
            });
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
        }
    
        static void 
            webBrowser_DocumentCompleted(
            object sender, 
            WebBrowserDocumentCompletedEventArgs e)
        {
            var webBrowser = (WebBrowser)sender;
            using (Bitmap bitmap = 
                new Bitmap(
                    webBrowser.Width, 
                    webBrowser.Height))
            {
                webBrowser
                    .DrawToBitmap(
                    bitmap, 
                    new System.Drawing
                        .Rectangle(0, 0, bitmap.Width, bitmap.Height));
                bitmap.Save(@"filename.jpg", 
                    System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }
    }
    

    Note: Credits should go to Hans Passant for his excellent answer on the question WebBrowser Control in a new thread which inspired this solution.

    0 讨论(0)
  • 2020-11-27 13:36

    Thanks all for your responses. I used HtmlRenderer external dll (library) to achieve the same and found below code for the same.

    Here is the code for this

    public void ConvertHtmlToImage()
    {
       Bitmap m_Bitmap = new Bitmap(400, 600);
       PointF point = new PointF(0, 0);
       SizeF maxSize = new System.Drawing.SizeF(500, 500);
       HtmlRenderer.HtmlRender.Render(Graphics.FromImage(m_Bitmap),
                                               "<html><body><p>This is a shitty html code</p>"
                                               + "<p>This is another html line</p></body>",
                                                point, maxSize);
    
       m_Bitmap.Save(@"C:\Test.png", ImageFormat.Png);
    }
    
    0 讨论(0)
提交回复
热议问题