wake-up-neo.net

Konvertieren Sie den HTML-String in ein Bild

Ich habe eine String-Variable, die HTML-Markup enthält. Dieses HTML-Markup repräsentiert im Wesentlichen den E-Mail-Inhalt.

Jetzt möchte ich aus diesem String-Inhalt ein Bild erstellen, das eigentlich das HTML-Markup enthält. Ich möchte die HTML-Datei nicht erstellen, indem ich diesen Inhalt in sie schreibe. Ich möchte nur eine Bilddatei mit dieser Zeichenfolge erstellen.

Folgendes habe ich:

string emailBody="<html><head></head><body><p>This is my text<p>...</body</html>"

Wie kann ich ein Bild aus diesem emailBody-String-Inhalt erstellen?

31
Sachin

Vielen Dank für Ihre Antworten. Ich habe HtmlRenderer external dll (library) verwendet, um dasselbe zu erreichen, und fand unter code für dasselbe.

Hier ist der Code dafür

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);
}
47
Sachin

Versuche Folgendes:

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);
        }
    }
}

Hinweis: Credits sollten an Hans Passant für seine hervorragende Antwort auf die Frage WebBrowser Control in einem neuen Thread gehen, die diese Lösung inspiriert haben.

23
Alex Filipovici