IE浏览器整页截屏程序(二)

 

上一篇随笔中,大家给出了不少建议,尤其是指出了截屏方法的不足之处。其实,使用上述方法去截屏也是逼不得已,因为公司实际项目需求中,还有其他一些要求,在此不便细说。如果仅仅为了截屏,我推荐大家直接用WebBrowser控件来实现,非常简单。

 

实现步骤如下:

(1)新建一个Form应用程序,在窗体上添加一个Panel,假设Name为panel1,设置:panel1.AutoScroll=true。

(2)在panel1中放置一个WebBrowser控件,假设Name为webBrowser1,设置:webBrowser1.ScriptErrorsSuppressed = true;(禁止弹出脚本错误框)

(3)注册webBrowser1.DocumentCompleted事件,当页面加载完毕后,将webBrowser1的大小设置为和页面一样大。这是最关键的地方,否则就只能截取可见部分了

(4)最后,调用webBrowser1.DrawToBitmap方法,将页面画到Bitmap上,然后保存为图片文件。

 

C#源代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WebBrowserTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Navigate(textBox1.Text);
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (e.Url.Equals(textBox1.Text))
            {//这里比较麻烦,有些网站并不满足这个条件:webBrowser1.ReadyState == WebBrowserReadyState.Complete
                //将WebBrowser控件设置为和页面一样大(这步很关键,否则只能截取到可见部分)
                Size rc = webBrowser1.Document.Body.ScrollRectangle.Size;
                webBrowser1.Width = rc.Width + SystemInformation.VerticalScrollBarWidth;
                webBrowser1.Height = rc.Height + SystemInformation.HorizontalScrollBarHeight;

                //将页面画到一个画布上,然后另存为图片
                using (Bitmap bitmap = new Bitmap(webBrowser1.Width, webBrowser1.Height))
                {
                    webBrowser1.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));
                    bitmap.Save(@"d:\capture.png");
                }
                MessageBox.Show("OK");
            }
        }
    }
}


【总结】

使用WebBrowser控件也有不足之处,比方说:

1、DocumentCompleted状态判断不稳定;

2、弹出窗口不好过滤。

3、必须依赖Form窗口。

此外,WebBrowser控件是基于IE内核的,也有的朋友采用的是基于WebKit内核的浏览器组件,用起来也挺方便的。欢迎大家继续指正。

 

最后给出sina.com.cn的首页截图,看看效果(图片太大,压缩了一下,所以有点模糊):

posted @ 2012-05-26 22:58  卡卡西村长  阅读(2520)  评论(2编辑  收藏  举报