将HTML字符串转换为图像

Sac*_*hin 38 html c# asp.net

我有一个字符串变量,它包含HTML标记.此HTML标记基本上代表电子邮件内容.

现在我想从这个实际包含HTML标记的字符串内容创建一个图像.我不想通过将这些内容写入其中来创建HTML文件.我只想用这个字符串创建一个图像文件.

这就是我所拥有的:

string emailBody="<html><head></head><body><p>This is my text<p>...</body</html>"
Run Code Online (Sandbox Code Playgroud)

如何从此emailBody字符串内容创建图像?

Sac*_*hin 57

谢谢大家的回复.我使用HtmlRenderer外部dll(库)来实现相同的,并在下面找到相同的代码.

这是代码

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);
}
Run Code Online (Sandbox Code Playgroud)

  • subash,你需要添加HtmlRenderer,WinForms然后使用TheArtOfDev.HtmlRenderer.WinForms.HtmlRender.RenderToImage (6认同)
  • 我尝试使用上面的代码引用 htmlrenderer 程序集。但它不起作用。无法识别程序集。我尝试使用命名空间作为“using TheArtOfDev.HtmlRenderer” (2认同)
  • 我在我的 asp.net web 应用程序中添加了 HtmlRenderer.Core dll,并且没有可用的 HtmlRenderer.HtmlRender.Render 方法。 (2认同)

Ale*_*ici 25

请尝试以下方法:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:积分应该转到Hans Passant,因为他在WebBrowser Control这个问题上给出了很好的答案.