用 ASP.NET 做网站截图(代码示例)

本文介绍了一种在ASP.NET环境中实现网页截图的方法。通过设置WebBrowser控件,并利用其DocumentCompleted事件来完成整个网页的截图过程。代码示例中详细展示了如何通过C#语言进行配置及截图。

一、添加引用

在解决方案上单击右键,选择“Add Reference...”,添加“System.Windows.Forms”,添加完后,Web.Config 中应该有类似下面的内容:


 
    
     

二、 设置 STA 模式

在 @ Page 指令中加上 AspCompat="true",以强制该网页在 STA(单线程单元) 模式下执行。结果类似如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" AspCompat="true" %>

三、写截图代码

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
 
public partial class _Default : System.Web.UI.Page
{
    
private WebBrowser _webBrowser;
    
    
    
protected void Page_Load(object sender, EventArgs e)
    {
        
string url = Request.QueryString["url"];
        
if (string.IsNullOrEmpty(url))
        {
            url 
= "http://www.cftea.com/";
        }
        
        _webBrowser 
= new WebBrowser();
        _webBrowser.ScrollBarsEnabled 
= false//不显示滚动条
        _webBrowser.Navigate(url);
        _webBrowser.DocumentCompleted 
+= new WebBrowserDocumentCompletedEventHandler(Completed);
        
        
while (_webBrowser.ReadyState != WebBrowserReadyState.Complete)
        {
            System.Windows.Forms.Application.DoEvents(); 
//避免假死,若去掉则可能无法触发 DocumentCompleted 事件。
        }
    }
    
    
    
public void Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        
//设置浏览器宽度、高度为文档宽度、高度,以便截取整个网页。
        _webBrowser.Width = _webBrowser.Document.Body.ScrollRectangle.Width;
        _webBrowser.Height 
= _webBrowser.Document.Body.ScrollRectangle.Height;
        
using (Bitmap bmp = new Bitmap(_webBrowser.Width, _webBrowser.Height))
        {
            _webBrowser.DrawToBitmap(bmp, 
new Rectangle(00, bmp.Width, bmp.Height));
            bmp.Save(
"C:\\Capture.png", ImageFormat.Png);
        }
    }
}

四、说明

在调试时,若出错,应该停止 ASP.NET Development Server,重新运行,如果你用的是 IIS,可能需要重新启动 IIS(猜测是这样),否则 Navigate 那句会出错。

有些网站抓下来是空白,还没有仔细研究过为什么。

1330304.html?type=2

--------------------------
新闻: 微软网页开发调试利器SuperPreview(附下载)
导航: 博客园首页   知识库   新闻   招聘   社区   小组   博问   网摘   找找看

转载于:https://my.oschina.net/voswin/blog/179

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值