2013-07-24 17 views
26

Ich habe eine String-Variable, die HTML-Markup enthält. Dieses HTML-Markup stellt im Grunde den Inhalt der E-Mail dar.HTML-String in Bild konvertieren

Jetzt möchte ich ein Bild aus diesem String-Inhalt erstellen, der tatsächlich 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.

Hier ist, was ich habe:

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

Wie kann ich ein Bild von diesem emailBody String Inhalt erstellen?

+1

Duplizieren: http://stackoverflow.com/questions/10721884/render-html-to-an-image –

+1

Haben Sie brauchen so etwas wie [http: // htmlrenderer.codeplex.com/](http://htmlrenderer.codeplex.com/)? –

+0

Danke @AlexFilipovici. Ich habe das untersucht und auch einen Beitrag dazu gefunden. Aber ich möchte nur wissen, ob es dafür nativen Code gibt. Ich werde es benutzen, wenn nichts anderes gefunden wird. http://amoghnatu.wordpress.com/2013/05/13/converting-html-text-to-image-using-c/ – Sachin

Antwort

43

Vielen Dank für Ihre Antworten. Ich habe HtmlRenderer externe DLL verwendet, um das gleiche zu erreichen und die code für das gleiche gefunden. Hier

ist der Code für diesen

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

Warum bekommt diese Antwort nicht mehr Upvotes? Arbeitete fast perfekt für mich (außer dass ich etwas Feinabstimmung für die Bildauflösung machen musste)? – Marcel

+0

Verwenden Sie stattdessen HtmlRenderer.HtmlRender.RenderGdiPlus oder es sieht nicht allzu gut aus. –

+0

Weitere Informationen finden Sie unter HTML-Renderer [Bild aus HTML-Markup generieren] (https://htmlrenderer.codeplex.com/wikipage?title=Image%20generation). – Arthur

1

Es ist nicht notwendig, HTML in ein Bild zu konvertieren, um es als Nachrichtentext zu versenden.

Legen Sie den Inhalt entsprechend auf die Zeichenfolge, die Sie haben, und den Inhaltstyp des Körperteils entsprechend.

+0

Danke für die Antwort. Aber ich möchte kein Bild in die Mail senden. Ich möchte diesen Mail-Text als Bild für eine andere Verwendung speichern. – Sachin

20

Versuchen Sie 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 gehen sollte Hans Passant für seine hervorragende answer auf die Frage WebBrowser Control in a new thread, die diese Lösung inspiriert.

+0

Die folgende Zeile gibt Fehler Application.Run(); –