web-dev-qa-db-fra.com

Convertir une chaîne HTML en image

J'ai une variable de chaîne qui contient le balisage HTML. Ce balisage HTML représente essentiellement le contenu du courrier électronique.

Maintenant, je veux créer une image à partir de ce contenu de chaîne contenant le balisage HTML . Je ne veux pas créer le fichier HTML en y écrivant ce contenu. Je veux juste créer un fichier image en utilisant cette chaîne.

Voici ce que j'ai

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

Comment créer une image à partir de ce contenu de chaîne emailBody?

31
Sachin

Merci à tous pour vos réponses. J'ai utilisé HtmlRenderer dll externe (bibliothèque) pour atteindre le même résultat et se trouve ci-dessous code pour le même.

Voici le code pour cela

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

Essayez ce qui suit:

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: les crédits devraient aller à Hans Passant pour son excellent réponse sur la question WebBrowser Control dans un nouveau fil de discussion qui a inspiré cette solution

23
Alex Filipovici