关于这个有很多线索,但没有一个是清楚的,我尝试过的也没有一个是正确的。
获取整个 Web 浏览器控件的内容(即使是屏幕外的内容)的代码是什么?
看起来他们确实有:
webBrowser1.DrawToBitmap(); // but its unsupported and doesnt work
关于这个有很多线索,但没有一个是清楚的,我尝试过的也没有一个是正确的。
获取整个 Web 浏览器控件的内容(即使是屏幕外的内容)的代码是什么?
看起来他们确实有:
webBrowser1.DrawToBitmap(); // but its unsupported and doesnt work
尝试确保您在DocumentCompleted
事件中调用该方法。
webBrowser1.Width = wb.Document.Body.ScrollRectangle.Width;
webBrowser1.Height = wb.Document.Body.ScrollRectangle.Height;
Bitmap bitmap = new Bitmap(webBrowser1.Width, webBrowser1.Height);
webBrowser1.DrawToBitmap(bitmap, new Rectangle(0, 0, webBrowser1.Width, webBrowser1.Height));
上周我在我的项目中研究了一个类似的功能,阅读了一些关于这个主题的帖子,包括你的链接。我想分享我的经验:
该函数的关键部分是 System.Windows.Forms.WebBrowser.DrawToBitmap 方法。
但它不受支持且不起作用
它受支持并且可以正常工作,但并不总是可以正常工作。在某些情况下,你会得到一个空白的图像截图(根据我的经验,它加载的 html 越复杂,它失败的可能性就越大。在我的项目中,只有非常简单且格式正确的 html 会被加载到 WebBrowser 控件中,所以我从来没有得到空白图像)。
无论如何,我也没有 100% 完美的解决方案。这是我的核心代码的一部分,希望对您有所帮助(它适用于 ASP.NET MVC 3)。
using (var browser = new System.Windows.Forms.WebBrowser())
{
browser.DocumentCompleted += delegate
{
using (var pic = new Bitmap(browser.Width, browser.Height))
{
browser.DrawToBitmap(pic, new Rectangle(0, 0, pic.Width, pic.Height));
pic.Save(imagePath);
}
};
browser.Navigate(Server.MapPath("~") + htmlPath); //a file or a url
browser.ScrollBarsEnabled = false;
while (browser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
}