Преобразование HTML-строки в изображение
У меня есть строковая переменная, которая содержит разметку HTML. Эта разметка HTML в основном представляет содержимое электронной почты.
Теперь я хочу создать изображение из этого строкового содержимого, которое фактически содержит разметку HTML.
Я не хочу создавать HTML файл, вставляя в него этот контент. Я просто хочу создать файл изображения, используя эту строку.
Вот что у меня есть:
string emailBody="<html><head></head><body><p>This is my text<p>...</body</html>"
Как создать изображение из этого emailBody
содержимого строки?
Ответы
Ответ 1
Спасибо всем за ваши ответы. Я использовал 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);
}
Ответ 2
Попробуйте следующее:
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 за отличный ответ по вопросу WebBrowser Control в новом потоке, который вдохновил это решение.
Ответ 3
Нет необходимости конвертировать html в изображение, отправляемое как тело письма.
Просто установите контент в строку, которая у вас есть, и тип содержимого этой части тела соответственно.