it-swarm.dev

تحويل سلسلة HTML إلى صورة

لدي متغير سلسلة يحمل علامة HTML. تمثل علامة HTML هذه محتوى البريد الإلكتروني أساسًا.

أريد الآن إنشاء صورة من محتوى السلسلة الذي يحمل علامة HTML. لا أريد إنشاء ملف HTML عن طريق كتابة هذا المحتوى فيه. أريد فقط إنشاء ملف صورة باستخدام هذه السلسلة.

إليك ما لدي:

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

كيف يمكنني إنشاء صورة من محتوى السلسلة emailBody؟

34
Sachin

شكرا للجميع على ردودكم. اعتدت HtmlRenderer الخارجية دلل (مكتبة) لتحقيق نفسه وجدت أدناه رمز لنفسه.

هنا هو رمز لهذا

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

حاول القيام بما يلي:

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

ملاحظة: يجب أن تذهب الائتمانات إلى Hans Passant ​​لممتازة --- answer عن السؤال WebBrowser Control في سلسلة جديدة التي ألهمت هذا الحل.

24
Alex Filipovici