个人觉得要实现这个功能如果没有类库提供的几个关键函数,还是比较繁琐的。所以首先介绍几个将要在代码中使用的关键函数和参数,然后再说函数实现、注意问题等。

  关键函数:

  1.函数原型:Response.AppendHeader(name,value);

    本例中使用: Response.AppendHeader("Content-Disposition", "attachment;filename=fileDown.doc");

  说明:将http头添加到输出流,name 为Http头,value为Http头的值,可以实现刷新页面,页面跳转,文件下载等,就看你name的值是什么。例如在本例中使用name为Content-Disposition:

    Content-Disposition:是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活浏览器文 件下载对话框,它的文件名框自动填充了头中指定的文件名,来确保浏览器弹出下载对话框。

在本例中value的值为attachment;filename=fileDown.doc:

    attachment: attachment 参数表示作为附件下载,您可以改成 online在线打开 ,filename自定义下载的文件名称,文件后缀为想要下载的文件类型,后面有说明。

  2.Response.ContentType

    本例中设置:Response.ContentType = "application/ms-word";

  说明:指定文件类型 可以为application/ms-excel , application/ms-word,application/ms-txt,application/ms-html或其他浏览器可直接支持文档。

  3.System.Web.UI.HtmlTextWriter类

  说明:将标记字符和文本写入到 ASP.NET 服务器控件输出流,也就是用于把HTML内容输出到服务器控件输出流的一个类。在本例中是将要下载的页面内容输出到一个StringWriter对象中。

  4.RenderControl(HtmlWriter);

  说明:将服务器控件的内容输出到所提供的HtmlWriter对象中,在本例中是将要下载的页面内容输出到HtmlWriter中。

  注意:在本例中需要将页面的EnableEventValidation="false",<pages enableEventValidation="false"/>不然会执行出错。

  实现思想:

  第一步:设置Response的格式,缓冲,编码等,调用AppendHeader函数用于弹出浏览器保存文件对话框,并设置文件名字、类型以及保存方式(在线浏览还是作为附件保存)。

  第二步:初始化HtmlWriter,将下载页面内容输出给HtmlWriter,并将内容输出到一个StringWriter对象中。

  第三步:将StringWriter对象的值赋值给一个string对象,然后操作字符串对象,截取想要下载的内容。

  第四步:调用Response.Write将string对象输出到第一步指定的文件中。

  代码:

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebPageContentDownload
{
public partial class DownloadWebPageContent : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void download_Click(object sender, EventArgs e)
{
//设置Http的头信息,编码格式
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
HttpContext.Current.Response.ContentType = "application/ms-word";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=fileDown.doc");
//关闭控件的视图状态 ,如果仍然为true,RenderControl将启用页的跟踪功能,存储与控件有关的跟踪信息
this.EnableViewState = false;
//将要下载的页面输出到HtmlWriter
System.IO.StringWriter writer = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
this.RenderControl(htmlWriter);
//提取要输出的内容
string pageHtml = writer.ToString();
int startIndex = pageHtml.IndexOf("<div style=\"margin: 0 auto;\" id=\"mainContent\">");
int endIndex = pageHtml.LastIndexOf("</div>");
int lenth = endIndex - startIndex;
pageHtml = pageHtml.Substring(startIndex, lenth);
//输出
HttpContext.Current.Response.Write(pageHtml.ToString());
HttpContext.Current.Response.End();
}
}
}

asp.net实现将网页内容输出到word并下载到本地的更多相关文章

  1. 把数据输出到Word (组件形式)

    上一篇的文章中我们介绍了在不使用第三方组件的方式,多种数据输出出到 word的方式,最后我们也提到了不使用组件的弊端,就是复杂的word我们要提前设置模板.编码不易控制.循环输出数据更是难以控制.接下 ...

  2. 把数据输出到Word (非插件形式)

    项目开发过程中,我们要把数据以各种各样的形式展现给客户.把数据以文档的形式展现给客户相信是一种比较头疼的问题,如果没有好的方法会 使得我的开发繁琐,而且满足不了客户的需求.接下来我会通过两种开发方式介 ...

  3. ASP.NET抓取网页内容的实现方法

    这篇文章主要介绍了ASP.NET抓取网页内容的实现方法,涉及使用HttpWebRequest及WebResponse抓取网页内容的技巧,需要的朋友可以参考下 一.ASP.NET 使用HttpWebRe ...

  4. ASP.NET抓取网页内容

    原文:ASP.NET抓取网页内容 一.ASP.NET 使用HttpWebRequest抓取网页内容 这种方式抓取某些页面会失败 不过,有时候我们会发现,这个程序在抓取某些页面时,是获不到所需的内容的, ...

  5. 使Asp.net Core同时支持输出Json/Xml

    我们知道Asp.net Core是支持输出为Json格式的.同时也支持输出为xml格式.只要我们正确的配置.并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式. 前 ...

  6. 在ASP.NET中将GridView数据导出到Word、Excel

    在ASP.NET中将GridView数据导出到Word.Excel asp.net,导出gridview数据到Word,Excel,PDF   #region Export to Word, Exce ...

  7. 使用cmd命令进行运行java(cmd命令输出Hello word)

    使用cmd命令输出Hello word 条件,按照好jdk和jre的环境下,如果没有安装,请安装,简单安装教程链接:https://www.cnblogs.com/weibanggang/p/9392 ...

  8. ASP.NET 抓取网页内容

    (转)ASP.NET 抓取网页内容 ASP.NET 抓取网页内容-文字 ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest. ...

  9. 实验二:编写输出“Hello word!”

    一:编写输出“Hello word!” 1.运行eclipse,在project name中输入要创建的项目名称. 2.创建java类,点击File->New->Class,在弹出窗口中N ...

随机推荐

  1. tomcat下出现The file is absent or does not have execute&

    启动tomcat出现The file is absent or does not have execute permission... Cannot find bin/catalina.sh The ...

  2. Swift - defer关键字(推迟执行)

    在一些语言中,有try/finally这样的控制语句,比如Java. 这种语句可以让我们在finally代码块中执行必须要执行的代码,不管之前怎样的兴风作浪. 在Swift 2.0中,Apple提供了 ...

  3. SignalR2.0开发实例之——负载均衡

    SignalR 2.0作为一个新的而且强大的通信工具,发布博客之后得到了很多人的支持,谢谢...也有人对性能和架设等问题提出了各种质疑..真的很感谢.. 我特意下载了SignalR 2.0的源码硬着头 ...

  4. (四)backbone - DEMO - 通信录

    DEMO介绍 是DEMO - User List 的扩展,增加查询 大体实现 •创建Contact Model var Contact = Backbone.Model.extend({ defaul ...

  5. [Oracle] 浅谈Sequence

    Oracle的Sequence是一种数据库对象,它可以生成有序数字,主要用于主键的自动生成.如果没有Sequence,主键的自动生成必须得在代码逻辑里实现,大致过程是:获取当前主键值,新主键值=当前主 ...

  6. h5connect.js 腾讯云视频点播使用指南

    http://video.qcloud.com/download/docs/QVOD_Player_Web_SDK_Developer_Guide.pdf 腾讯云视频点播服务 Web播放器SDK开发指 ...

  7. php 之 房屋租赁练习(0509)

    做出以下页面并实现其对应的功能: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  8. 什么叫CallBack函数,怎么用回调函数?

    JQuery众多常用方法中很经常会用到回调函数, 理解好js callback函数定义及用法,我们就可以利用callback函数帮我们做很多事情啦! A callback is a function ...

  9. 关于 VS2013监视窗口的内存面板及寄存器面板

    1.插入断点,按F5调试,2.选择菜单项 debug-窗口-3.即可找到您要的监视窗口.

  10. Java并发编程--线程封闭(Ad-hoc封闭 栈封闭 ThreadLocal)

    线程封闭实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发.避免并发最简单的方法就是线程封闭.什么是线程封闭呢?就是把对象封装到一个线程里,只有这一个线程能看到此对象.那么这个对象就算不是线程 ...