我需要捕获生成的 HTML 的图像。我在这里使用 Alex Filipovici 的出色解决方案:Convert HTML string to image。它工作得很好,除非我尝试加载具有使用某些 Javascript 加载的 iframe 的页面。
静态 int 宽度 = 1024;
静态 int 高度 = 768;
公共静态无效捕获()
{
变量 html = @"
<!DOCTYPE html>
<meta http-equiv='X-UA-Compatible' 内容='IE=Edge'>
<html>
<iframe id='forecast_embed' type='text/html' frameborder='0' height='245' width='100%' src='http://forecast.io/embed/#lat=42.3583&lon=- 71.0603&name=波士顿市中心'> </iframe>
</html>
";
开始浏览器(html);
}
私有静态无效StartBrowser(字符串源)
{
var th = 新线程(() =>
{
var webBrowser = new WebBrowser();
webBrowser.Width = 宽度;
webBrowser.Height = 高度;
webBrowser.ScrollBarsEnabled = false;
webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
webBrowser.DocumentText = 源;
应用程序.运行();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
静态无效 webBrowser_DocumentCompleted(对象发送者,WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser = (WebBrowser)sender;
使用(位图位图 = 新位图(宽度,高度))
{
webBrowser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, width, height));
bitmap.Save(@"image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
应用程序.Exit();
}
我知道可能没有明确的方法可以知道所有 javascript 是否已经结束以及 iframe 加载的变幻莫测以及 DocumentCompleted get 被调用的次数与 frame/iframe + 1 一样多。我可以用计数器处理 iframe 加载什么的,但我想要的只是一个合理的延迟,所以加载了javascript,我没有得到一个像这样的“正在加载”的图像:http: //imgur.com/FiFMTmm