有没有办法将ViewResult或PartialViewResult渲染为图像?
我试图将ViewResult作为字符串,我得到了一个包含html的字符串,但我需要将该html渲染为图像。如果可能 - 使用样式和图像。
我有一个想法是在服务器上为这个html获取一些浏览器输出并将结果捕获到图像,但是如何在实践中完成我目前还不知道。 如果您有任何想法,请帮助。
请不要建议任何第三方组件。只需告诉标准.NET类是否无法做到这一点。
谢谢
答案 0 :(得分:8)
请参阅How to render an image using the WebBrowser control
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);
答案 1 :(得分:0)
对不起我之前的建议。真的,这不对。现在我明白你想要什么。但是如果你不喜欢使用第三方解决方案的想法,唯一的办法就是编写自己的解析器,这不是一件容易的事。或者您可以尝试使用WebBrowser类及其方法DrawToBitmap如何在此处描述http://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html