2013-07-24 3 views
26

Tôi có biến chuỗi giữ HTML đánh dấu. Đánh dấu HTML này về cơ bản đại diện cho nội dung email.Chuyển đổi chuỗi HTML thành hình ảnh

Bây giờ tôi muốn tạo một hình ảnh từ nội dung chuỗi này thực sự chứa đánh dấu HTML. Tôi không muốn tạo tệp HTML bằng cách viết nội dung này vào chúng. Tôi chỉ muốn tạo một tập tin hình ảnh bằng cách sử dụng chuỗi này.

Dưới đây là những gì tôi có:

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

Làm thế nào tôi có thể tạo ra một hình ảnh từ nội dung emailBody chuỗi này?

+1

Duplicate này: http://stackoverflow.com/questions/10721884/render-html-to-an-image –

+1

Bạn có cần một cái gì đó như [http: // htmlrenderer.codeplex.com/](http://htmlrenderer.codeplex.com/)? –

+0

Cảm ơn @AlexFilipovici. Tôi đã xem xét điều này và tôi cũng đã tìm thấy một bài viết về điều này. Nhưng tôi chỉ muốn biết nếu có bất kỳ mã nguồn gốc có sẵn cho điều này .. Bất kỳ cách nào tôi sẽ sử dụng nó nếu không có gì khác được tìm thấy. http://amoghnatu.wordpress.com/2013/05/13/converting-html-text-to-image-using-c/ – Sachin

Trả lời

43

Cảm ơn tất cả các câu trả lời của bạn. Tôi đã sử dụng HtmlRenderer dll bên ngoài để đạt được cùng một và tìm thấy các code cho cùng một.

Đây là mã cho

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

Tại sao câu trả lời này không nhận được nhiều phiếu bầu hơn? Làm việc gần như hoàn hảo cho tôi (ngoại trừ việc tôi phải làm một số điều chỉnh tốt cho độ phân giải hình ảnh)? – Marcel

+0

Sử dụng HtmlRenderer.HtmlRender.RenderGdiPlus thay vào đó, hoặc nó trông không quá tốt. –

+0

Xem trình kết xuất HTML [Tạo hình ảnh từ đánh dấu HTML] (https://htmlrenderer.codeplex.com/wikipage?title=Image%20generation) cho tất cả các chi tiết. – Arthur

1

Không cần chuyển đổi html sang hình ảnh để gửi dưới dạng nội dung email.

Chỉ cần đặt nội dung vào chuỗi bạn có và loại nội dung của phần nội dung phù hợp.

+0

Cảm ơn bạn đã phản hồi. Nhưng tôi không muốn gửi hình ảnh vào thư. Tôi muốn lưu nội dung thư đó làm Hình ảnh cho một số cách sử dụng khác. – Sachin

20

Hãy thử như sau:

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

Lưu ý: Cho vay nên đến Hans Passant cho ông tuyệt vời answer về vấn đề WebBrowser Control in a new thread mà lấy cảm hứng từ giải pháp này.

+0

Dòng sau đây cho lỗi Application.Run(); –