渲染ASP.NET MVC的ViewResult HTML因为没有第三方组件
问题描述:
图像是有办法来渲染的ViewResult或PartialViewResult为图像?渲染ASP.NET MVC的ViewResult HTML因为没有第三方组件
我试图让的ViewResult为字符串,我得到了包含HTML,因为它应该是一个字符串,但我需要渲染HTML图像。如果可能 - 包括样式和图像。
我有一个想法,得到了这个网站上的服务器和捕获结果的图像浏览器的一些输出,但它是如何在实践中完成的,我不知道在这个时候。 如果您有任何想法,请帮忙。
请不要提出任何第三方组件。只要告诉它是否不可能通过标准的.NET类来完成。
谢谢
答
见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);
答
对不起,我以前的建议。这是不正确的,真的。现在我明白你想要什么了。但是如果你不喜欢使用第三方解决方案的想法,唯一的方法就是编写你自己的解析器,这不是一件容易的事情。或者你可以尝试使用web浏览器类,以及它如何在这里描述的方法DrawToBitmap http://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html
这是不正确的,他不会要求下载一个图像。他想要将网页呈现为图像,然后下载它。下载很简单,渲染不那么简单。 – 2011-12-21 20:29:28
哦,真的吗?我还是不明白。你的意思是任务是图像的返回,例如,如果视图有表格,图像应该包含表格? – Kath 2011-12-21 21:08:15