2013-07-24 5 views
26

У меня есть строковая переменная, содержащая разметку HTML. Эта разметка HTML в основном представляет собой содержимое электронной почты.Преобразование HTML-строки в изображение

Теперь я хочу создать изображение из этого строкового содержимого, которое фактически содержит разметку HTML. Я не хочу создавать HTML-файл, вставляя в него этот контент. Я просто хочу создать файл изображения, используя эту строку.

Вот что у меня есть:

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

Как я могу создать изображение из этого emailBody содержимого строки?

+1

Дубликат: http://stackoverflow.com/questions/10721884/render-html-to-an-image –

+1

вам нужно что-то вроде Do [HTTP: // htmlrenderer.codeplex.com/](http://htmlrenderer.codeplex.com/)? –

+0

Спасибо @AlexFilipovici. Я изучил это, и я также нашел сообщение об этом. Но я просто хочу знать, есть ли какой-либо родной код для этого. Любой способ я буду использовать, если ничего не найдено. http://amoghnatu.wordpress.com/2013/05/13/converting-html-text-to-image-using-c/ – Sachin

ответ

43

Спасибо всем за ваши ответы. Я использовал HtmlRenderer внешнюю dll для достижения того же и нашел code для этого же.

Вот код для этого

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

Почему этот ответ не получает больше очков? Работала почти отлично для меня (кроме того, что мне нужно было сделать тонкую настройку для разрешения изображения)? – Marcel

+0

Вместо этого используйте HtmlRenderer.HtmlRender.RenderGdiPlus, или он не выглядит слишком хорошо. –

+0

См. HTML Renderer [Сгенерировать изображение из разметки HTML] (https://htmlrenderer.codeplex.com/wikipage?title=Image%20generation) для всех деталей. – Arthur

1

Нет необходимости конвертировать html в изображение для отправки в виде тела письма.

Просто установите содержание в строку, которая у вас есть, и тип содержимого этой части тела соответственно.

+0

Спасибо за ответ. Но я не хочу отправлять изображение в почту. Я хочу сохранить этот почтовый ящик как изображение для другого использования. – Sachin

20

Попробуйте следующее:

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 in a new thread который вдохновил это решение.

+0

Следующая строка дает ошибку Application.Run(); –

Смежные вопросы