我擁有帶有網址的字符串。例如「http://google.com」。將網頁呈現爲圖片
是否有任何方式下載並渲染此頁面到圖片文件? (「test.jpg」)
我試圖使用WebBrowser控件來下載和渲染圖片,但它只在WebBrowser以顯示的形式放置時才起作用。在其他方面,它只渲染黑色矩形。
但我想渲染圖像而沒有任何視覺效果(創建,激活形式等)
我擁有帶有網址的字符串。例如「http://google.com」。將網頁呈現爲圖片
是否有任何方式下載並渲染此頁面到圖片文件? (「test.jpg」)
我試圖使用WebBrowser控件來下載和渲染圖片,但它只在WebBrowser以顯示的形式放置時才起作用。在其他方面,它只渲染黑色矩形。
但我想渲染圖像而沒有任何視覺效果(創建,激活形式等)
Internet Explorer支持的IHtmlElementRenderer接口,提供給一個頁面呈現爲任意設備上下文。這是一個示例表單,向您展示如何使用它。開始項目+添加引用,選擇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);
}
}
}
不幸的是,在MS IE棄用使用IHtmlElementRenderer :: DrawToDC()的9. http://msdn.microsoft.com/en-us/library/aa752273(v=vs.85).aspx
可這在非視覺environement被用於實例,在Windows服務器上的服務縮略HTML頁面? – 2010-04-05 13:51:16
我不明白爲什麼不,爲了使其可用,您不必在表單上放置WebBrowser。 – 2010-04-05 13:53:00
但是,WebBrowser需要一個STA線程和一個消息循環。你必須用Application.Run()創建一個。 – 2010-04-05 14:22:58