首页  ·  知识 ·  云计算
Asp.net实现在线截图(大图截取为小图)
goody9807  http://www.cnblogs.com/goody9807/archive/2008/10/3  综合  编辑:dezai  图片来源:网络
itemTitle>一、添加引用 在解决方案上单击右键,选择“Add Reference...”,添加“System.Windows.Forms”,添加完后,Web.Conf

一、添加引用

在解决方案上单击右键,选择“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" %>

三、写截图代码

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(0, 0, bmp.Width, bmp.Height));
            bmp.Save("C:\\Capture.png", ImageFormat.Png);
        }
    }
}

四、说明

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

本文作者:goody9807 来源:http://www.cnblogs.com/goody9807/archive/2008/10/3
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读