Рендеринг веб-страницы в изображение - PullRequest
8 голосов
/ 05 апреля 2010

У меня есть строка с URL.Например, "http://google.com".

Есть ли способ загрузить и отобразить эту страницу в файл изображения? (" Test.jpg ")

Я пытался использовать элемент управления WebBrowser, чтобы загрузить ирендеринг изображения, но он работает только тогда, когда WebBrowser помещен в отображаемую форму. Другими словами, он рендерит только черный прямоугольник.

Но я хочу рендерить изображение без какого-либо визуального эффекта (создание, активация формы и т. д.)

Ответы [ 2 ]

9 голосов
/ 05 апреля 2010

Internet Explorer поддерживает интерфейс IHtmlElementRenderer, доступный для отображения страницы в произвольном контексте устройства. Вот пример формы, которая показывает вам, как ее использовать. Начните с Project + Add Reference, выберите Microsoft.mshtml

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      webBrowser1.Url = new Uri("http://stackoverflow.com");
      webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
    }

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
      if (!e.Url.Equals(webBrowser1.Url)) return;
      // Get the renderer for the document body
      mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument;
      mshtml.IHTMLElement body = (mshtml.IHTMLElement)doc.body;
      IHTMLElementRender render = (IHTMLElementRender)body;
      // Render to bitmap
      using (Bitmap bmp = new Bitmap(webBrowser1.ClientSize.Width, webBrowser1.ClientSize.Height)) {
        using (Graphics gr = Graphics.FromImage(bmp)) {
          IntPtr hdc = gr.GetHdc();
          render.DrawToDC(hdc);
          gr.ReleaseHdc();
        }
        bmp.Save("test.png");
        System.Diagnostics.Process.Start("test.png");
      }
    }

    // Replacement for mshtml imported interface, Tlbimp.exe generates wrong signatures
    [ComImport, InterfaceType((short)1), Guid("3050F669-98B5-11CF-BB82-00AA00BDCE0B")]
    private interface IHTMLElementRender {
      void DrawToDC(IntPtr hdc);
      void SetDocumentPrinter(string bstrPrinterName, IntPtr hdc);
    }
  }
}
4 голосов
/ 27 декабря 2011

К сожалению, MS отказалась от использования IHtmlElementRenderer :: DrawToDC () в IE 9. http://msdn.microsoft.com/en-us/library/aa752273(v=vs.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...