1. 程式人生 > >ASP.NET實現將網頁內容輸出到WORD並下載到本地

ASP.NET實現將網頁內容輸出到WORD並下載到本地

個人覺得要實現這個功能如果沒有類庫提供的幾個關鍵函式,還是比較繁瑣的。所以首先介紹幾個將要在程式碼中使用的關鍵函式和引數,然後再說函式實現、注意問題等。

關鍵函式:

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”/>不然會執行出錯。

在匯出Execl或Word的時候,會發生只能在執行 Render() 的過程中呼叫 RegisterForEventValidation的錯誤提示。

下面的2中方法是在網上找到的:

  • 修改web.config(不推薦)
<pages enableEventValidation ="false" ></pages>
  • 直接在匯出Execl的頁面修改
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="ExportWordByIO.aspx.cs" Inherits="_Default" EnableEventValidation = "false"  %>

 實現思想:

  第一步:設定Response的格式,緩衝,編碼等,呼叫AppendHeader函式用於彈出瀏覽器儲存檔案對話方塊,並設定檔名字、型別以及儲存方式(線上瀏覽還是作為附件儲存)。

  第二步:初始化HtmlWriter,將下載頁面內容輸出給HtmlWriter,並將內容輸出到一個StringWriter物件中。

  第三步:將StringWriter物件的值賦值給一個string物件,然後操作字串物件,擷取想要下載的內容。

  第四步:呼叫Response.Write將string物件輸出到第一步指定的檔案中。
  
前臺:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm7.aspx.cs" Inherits="TH.WebForm7"  EnableEventValidation = "false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>匯出word</title>
</head>
<body>

    <form id="form1" runat="server">
    <div>
       秋天來臨了天空像一塊覆蓋大地的藍寶石。村外那個小池塘睜著碧澄澄的眼睛,凝望著這美好的天色。一對小白鵝側著腦袋欣賞自己映在水裡的影子。山谷裡楓樹的葉子,不知是否喝了過量的酒,紅的像一團火似的。村前村後的稻子,低著頭彎著腰,在秋風中默默地等待著人們去收割,半空中,排著“人”字形的雁群,高興的唱著歌,告別人們,向天邊慢慢飛去……
        <%--<img src="Image/sy_71272488121.jpg" />--%>
    </div>
      <asp:Button ID="Button1" runat="server" Text="匯出" onclick="Button1_Click" />
    </form>

</body>
</html>

後臺:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TH
{
    public partial class WebForm7 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 實現匯出word
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            //設定http的頭資訊,編碼格式
            //緩衝輸出
            HttpContext.Current.Response.Buffer = true;
            //清空頁面輸出流
            HttpContext.Current.Response.Clear();
            //設定輸出流的HTTP字符集
            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.函式原型:Response.AppendHeader(name,value);   

asp.net 實現開啟檔案所在的資料夾, 本地可以開啟,釋出後點擊按鈕沒有反應的解決辦法

            此類情況大概是安全範疇的問題             確定上傳資料夾的共享,iis  以及電腦帳戶,以及aspnet 等是否有對應的相關許可權             1.確認ASPNET 賬戶屬於管理員級別             2.在“服務”裡

iview中使用Tag時進行數據的變化和實現輸入內容轉化為標簽輸出數組

target spl method handle eof class har ash href 上代碼 <!DOCTYPE html> <html> <head> <meta charset="utf-8">

asp.net 使用HttpModule對全站輸出的動態頁面的HTML內容進行修改,不會錯亂

http://blog.csdn.net/lrxin/article/details/40861039 配置方法:      <httpModules>       <add name="FileEditModule" type="Framework.

asp.net 實現線上瀏覽word文件(word轉html)

最近在做word文件線上瀏覽,找了種種方法、控制元件之後,迴歸到word轉HTML,線上瀏覽.... 一下是後臺程式碼,前臺html頁面預設程式碼即可。 因為用檔案如下:using System; using System.Collections.Generic; usi

Asp.net實現直接在瀏覽器預覽Word、Excel、PDF、Txt檔案(附原始碼)

publicstaticvoid Priview(System.Web.UI.Page p, string inFilePath, string outDirPath ="")    {        Microsoft.Office.Interop.Excel.Application excel =nul

【.Net碼農】用asp.net實現遠端獲取其他網站頁面指定內容

遠端獲取網頁內容.經過一定的處理和靈活應用,可以開發成成體系網站內容採集系統.通常也叫做"新聞小偷"一般來說.做內容採集分為如下幾個大致的步驟:   1.遠端獲取頁面的全部Html源文字.   2.通過過濾處理,分析有效內容文字.(通常用正則表示式來擷取有效資料)   3.將格式有效的資料,根據自己的資料庫結

ASP.NET實現彈出框真分頁複選框選擇的資料存到資料庫中(二)

上一篇完成了彈出框介面的取值下面是第二步將彈出框儲存的資料傳到父頁面上。 需要在父頁面JS加上: function openDia() { returned = windo

ASP.NET實現彈出框真分頁複選框選擇的資料存到資料庫中(三)

這是第三步將資料在父頁面上顯示。程式碼如下: AddDD.aspx程式碼: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddDJLJDD.aspx.cs" Inherits="WEB.DDGL.

(JSP)如何網頁資料輸出為Excel或Word檔案

將一個jsp頁面中的<%@ page contentType="text/html; charset=GBK" language="java" %>替換為 <%@ page contentType="application/vnd.ms-Excel;ch

ASP .NET core 入門基礎內容備份

表達式model 裏邊設置主鍵 : [key]可以自定義主鍵 默認是名稱為ID類型為int的字段設置顯示格式: [DisplayFormat(DataFormatString="{0:顯示的格式}",[可選參數])設置字段顯示內容 [Display(Name = "要顯示的內容") ] 例: [Displ

ASP.NET實現支付寶接口功能

接口 系統 func error 程序 dex ges img user 最近做系統,需要實現在線支付功能,毫不猶豫,選擇的是支付寶的接口支付功能。這裏我用的是即時到帳的接口,具體實現的步驟如下: 一、下載支付寶接口包 下載地址:

C# asp.net實現文件上傳

function asp.net visual 開發 null 前端代碼: 使用visual studio開發實現文件上傳 前端頁面代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.as

ASP.NET 5 於2016年一季度公布

基於 rac 們的 新產品 是否 新的 length num 可能 簡單介紹:微軟ASP.NET團隊在GitHub宣布ASP.NET 5的公布時間表和發展藍圖。該團隊宣布在2015年還將公布三個Beta版。一個ASP.NET 5的搶先版(RC 1)。到2

Winform實現網頁生成圖片的方法

agen linq hal url label info reserve omr thumbnail 通常瀏覽器都有將網頁生成圖片的功能,本文實例講述了Winform實現將網頁生成圖片的方法。分享給大家供大家參考。具體方法如下: 工具截圖如下: 生成後的圖片如下: 手

ASP.NET 實現多頁面合一頁顯示

ssi 設置 form sdn 過程 使用 方式 顯示 用戶控件 目前業務有一個需求: 就是把多個網頁合並到一個頁面顯示, 在實現過程中我一般使用兩種方法: 利用母版頁設置導航欄, 定位到每個網頁; 利用用戶控件( .acsx 後綴的文件), 但是有個問題就是傳參比較麻煩

字串內容輸出到文件

fir alt image bubuko bsp info .com com src f = open("d:/py/3/1.txt", "w+")f.write("This is my first project")# for index in range(10): #

ASP.NET實現簡單的聊天室

目錄 Default.aspx Default.aspx.cs main.aspx main.aspx SendMessage.aspx SendMessage.aspx.cs  ShowMessage.aspx ShowMessage.aspx.cs

異構SOA系統架構之Asp.net實現(相容dubbo)

原文: 異構SOA系統架構之Asp.net實現(相容dubbo) 我們公司技術部門情況比較複雜,分到多個集團,每個集團又可能分為幾個部門,每個部門又可能分為多個小組,組織架構比較複雜,開發人員比較多。 使用的程式語言也有點複雜,主流語言有.net(C#)、Java、PHP等。 所以SOA架構需要的是異構

關於 asp.net Web Api 請求內容過大解決記錄。

解決方法:  <system.web>       <httpRuntime targetFramework="4.5" maxRequestLength="2147483647" />    &nbs