Рендеринг ASP.NET MVC ViewResult HTML в виде изображения без сторонних компонентов
Есть ли способ визуализации ViewResult или PartialViewResult как изображение?
Я попытался получить ViewResult в виде строки, и я получил строку, содержащую HTML, как и должно быть, но мне нужно отрендерить этот HTML в изображение. Если это возможно - со стилями и изображениями.
У меня есть идея получить браузер для этого HTML на сервере и записать результат в изображение, но как это можно сделать на практике, я пока не знаю. Если у вас есть идеи, пожалуйста, помогите.
Пожалуйста, не предлагайте сторонние компоненты. Просто скажите, если это невозможно сделать стандартными классами.NET.
Спасибо
2 ответа
См. Как отрисовать изображение с помощью элемента управления WebBrowser.
public class HtmlToBitmapConverter
{
private const int SleepTimeMiliseconds = 5000;
public Bitmap Render(string html, Size size)
{
var browser = CreateBrowser(size);
browser.Navigate("about:blank");
browser.Document.Write(html);
return GetBitmapFromControl(browser, size);
}
public Bitmap Render(Uri uri, Size size)
{
var browser = CreateBrowser(size);
NavigateAndWaitForLoad(browser, uri, 0);
return GetBitmapFromControl(browser, size);
}
public void NavigateAndWaitForLoad(WebBrowser browser, Uri uri, int waitTime)
{
browser.Navigate(uri);
var count = 0;
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Thread.Sleep(SleepTimeMiliseconds);
Application.DoEvents();
count++;
if (count > waitTime / SleepTimeMiliseconds)
{
break;
}
}
}
private WebBrowser CreateBrowser(Size size)
{
return
new WebBrowser
{
ScrollBarsEnabled = false,
ScriptErrorsSuppressed = true,
Size = size
};
}
private Bitmap GetBitmapFromControl(WebBrowser browser, Size size)
{
var bitmap = new Bitmap(size.Width, size.Height);
NativeMethods.GetImage(browser.Document.DomDocument, bitmap, Color.White);
return bitmap;
}
}
Тогда это так же просто, как
var image = new HtmlToBitmapConverter()
.Render(new Uri(urlTextBox.Text), pictureBox.Size);
Извините за мое предыдущее предложение. Это было не правильно, правда. Теперь я понимаю, что вы хотите. Но если вам не нравится идея использовать сторонние решения, единственный способ - написать собственный парсер, и это не простая задача. Или вы можете попробовать использовать класс WebBrowser и его метод DrawToBitmap, как описано здесь http://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html