日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用HttpHandler解析并展示PDF文档内容

發布時間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用HttpHandler解析并展示PDF文档内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

如果我們想將服務端的PDF文檔內容展示給客戶端,往往會通過URL直接訪問的方式。這樣一來,PDF文檔就會毫無保留的保存到客戶端去,通過瀏覽器的PDF插件,客戶端可以隨意拷貝PDF的副本。(如下圖)

本文通過HttpHandler和開源控件PDFBox來對PDF文檔進行訪問控制,只向客戶端解析并展示PDF的內容而非PDF文件本身。

?

PDF解析

目前有許多PDF解析組件,國內比較常用的是iTextSharp,該控件早期從JAVA移植過來,完全支持.NET平臺,在創建PDF文檔方面非常靈活易用。然而在讀取解析PDF時卻顯得力不從心,只有少數復雜難用的類可以讓我們讀取PDF。故不適合本案。

PDFBox在此方面表現卻非常突出,同樣,它也是從java平臺移植過來的, 常用來作為Lucene的PDF索引器。目前,它的開源項目中已經包含了通過IKVM.NET(IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework.)封裝,而支持.NET的組件。

PDFBox對PDF的讀取解析非常簡單,只用如下代碼即可完成:

private?static?string?parseUsingPDFBox(string?filename)
{
????PDDocument?doc?
=?PDDocument.load(filename);
????PDFTextStripper?stripper?
=?new?PDFTextStripper();
????
return?stripper.getText(doc);
}

?

故我們選取PDFBox作為PDF解析器。

?

編寫HttpHandler

接下來,我們新建一個類庫項目,在其中創建PDFHandler類,實現IHttpHandler接口,用來作為.pdf文件的handler。

主要完成的步驟如下:

1. 為類庫和網站添加如下引用:

  • PDFBox-0.7.2.dll
  • IKVM.GNU.Classpath.dll

?? 并將下面兩個類庫也復制到網站的Bin文件夾中:

  • FontBox-0.1.0-dev.dll
  • IKVM.Runtime.dll

2. 編寫PDFHandler類:

using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Web;
using?org.pdfbox.pdmodel;
using?org.pdfbox.util;
using?System.Web.UI.WebControls;
using?System.Web.UI;
using?System.IO;

namespace?LanceZhang.HTTP
{
????
public?class?PDFHandler:IHttpHandler
????{
????????
#region?IHttpHandler?Members

????????
public?bool?IsReusable
????????{
????????????
get?{?return?true;?}
????????}

????????
public?void?ProcessRequest(HttpContext?context)
????????{
????????????
//獲取請求的文件路徑,如C:\www\a.pdf
????????????string?path?=?context.Request.MapPath(context.Request.Path);

????????????
//創建PDF實體和文字解析器
????????????PDDocument?doc?=?PDDocument.load(path);
????????????PDFTextStripper?stripper?
=?new?PDFTextStripper();

????????????
//創建一個TextBox用來顯示PDF內容
????????????TextBox?tb?=?new?TextBox();

????????????tb.Style.Add(
"width","100%");
????????????tb.Style.Add(
"height",?"100%");

????????????tb.TextMode?
=?TextBoxMode.MultiLine;
????????????tb.Text
=stripper.getText(doc);

????????????
//將TextBox?render出來
????????????context.Response.Write(RenderControlAsString(tb));
????????}

????????
public?string?RenderControlAsString(Control?ctl)
????????{
????????????StringWriter?sw?
=?new?StringWriter();
????????????HtmlTextWriter?writer?
=?new?HtmlTextWriter(sw);
????????????ctl.RenderControl(writer);
????????????
return?sw.ToString();
????????}


????????
#endregion
????}
}

?

部署HttpHandler

1.? 編碼完成后,我們編譯Handler類庫項目,并添加網站對該項目的引用。

2.? 要使客戶端對*.pdf文件的請求被handler處理,我們還需要在web.config中配置剛剛編寫好的handler:

<system.web>
????
<httpHandlers>
??????
<add?verb="*"?path="*.pdf"?type="LanceZhang.HTTP.PDFHandler,LanceZhang.HTTP"/>
????
</httpHandlers>
</system.web>

?

3.?這時,使用Visual Studio自帶的ASP.NET Deployment Server已經可以成功運行程序了。然而,如果將網站部署到IIS中,我們還需要對IIS的應用程序配置做出修改,在程序映射中,使用aspnet_isapi.dll來處理.pdf文件:

?

OK,接下來啟動IIS,瀏覽“CardSpace.pdf”文件,我們就可以得到下面的效果:

?

下載PDFBox類庫

download the PDFBox package

?

轉載于:https://www.cnblogs.com/blodfox777/archive/2009/03/11/1408568.html

總結

以上是生活随笔為你收集整理的使用HttpHandler解析并展示PDF文档内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。