我需要捕获生成的 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