これについては多くのスレッドがありますが、どれも明確ではなく、実際に試したものもありませんでした。
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();
}
}