繁体   English   中英

如何使用C#中的内置Web浏览器保存完整的网页

[英]How to save a complete webpage using the built-in webbrowser in c#

总的来说,我正在尝试将网页写成PDF。 我可以使用一个Web服务将文件转换为pdf。 所以我想做的是从WebBrowser winforms控件中保存一个网页。

我已经尝试将其写出文档流,但这只是给我页面的html,而不是与之一起使用的图像。

我研究但尚未成功的另一种方法是尝试创建WebBrowser文档的图像。 我在网络上发现了一些利用DrawToBitmap函数的示例,但没有一个对我有用。

任何帮助将不胜感激。

您可以使用Graphics.CopyFromScreen函数来截取屏幕快照,直到获得整个页面。

// Get screen location of web browser
Rectangle rec = webBrowser1.RectangleToScreen(webBrowser1.ClientRectangle);
// create image to hold whats in view
Bitmap image = new Bitmap(rec.Width, rec.Height);
// get graphics to draw on image
Graphics g = Graphics.FromImage(image);
// Save into image
// From MSDN:
//public void CopyFromScreen(
//    int sourceX,
//    int sourceY,
//    int destinationX,
//    int destinationY,
//    Size blockRegionSize
//)
g.CopyFromScreen(rec.X,rec.Y,0,0,rec.Size)

您可能还需要删除滚动条,使它们不在您的图像中:

webBrowser.ScrollBarsEnabled = false;
webBrowser.Document.Body.Style = "overflow:hidden;";

然后向下滚动以拍摄下一页:

webBrowser.Document.Window.ScrollTo(x,y);

很久以前,我偶然发现了此CodeProject文章“ 将HTML文档捕获为图像

但是,有一个新的发布(2010年2月13日发布)“ C#中HTML到图像

我没有测试过它们中的任何一个,但我认为它们应该可以工作!

要创建PDF,您正在使用的程序将需要网站的源代码。 不管您使用WebBrowser winforms控件还是其他获取该信息的控件,都没有真正的区别。

假设您不需要先上传内容,则此代码将为您获取任何网站的源代码:

string url = "some site";
string source = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using(StreamReader sr = new StreamReader(response.GetResponseStream()){
    source = sr.ReadToEnd();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM