1. 程式人生 > >PDF線上預覽外掛彙總與方案總結

PDF線上預覽外掛彙總與方案總結

先介紹下工作背景:

java一枚,最近在做政府單位的資訊管理軟體,後臺需要對資料進行彙總,並生成PDF格式的報告檔案,生成PDF檔案用的是iReport生成的,具體可以去百度。生成完之後客戶得檢視吧,下載之後再檢視PDF檔案的方式體驗不好,需要利用外掛在瀏覽器上進行線上預覽。於是開始了研究之路.......(噢對了,後面還做了電子簽章,就是對PDF進行電子簽章)

一、PDF轉SWF(FlexPaper預覽)

這種做法類似於百度和豆丁的做法,就是先將PDF檔案轉換成swf檔案,然後利用FlexPaper外掛進行預覽,優點是瀏覽器性好。請看下面的百度介紹:


具體做法可以百度,一大把。我下面就說一下我遇到的問題:

1、首先我們的產品是給政府單位用的,某些單位的網路環境比較安全,是完全與網際網路隔離的,但是FlexPaper這個外掛在一些新機器上首次使用時,需要連線adobe官網快取一些必要檔案到客戶端本地,但是由於無法連線網際網路,所以FlexPaper外掛不能初始化,導致這個方案被斃了(但是後來查資料說 flexpaper在打包時可以選擇將快取檔案一起打包進去,這樣就能避免這個問題,但是研究了幾天都沒研究出來)

2、swf檔案清晰度不夠,客戶一直詬病這個

3、我們的PDF是需要進行電子簽章的,但是pdf2swf 時,不能轉換電子簽章的圖片,也就是電子簽章丟失。

二、pdf.js 

這是一款利用H5渲染PDF的外掛

優點:無需安裝任何外掛;清晰度高;

缺點:需要瀏覽器支援H5;無法展示 電子簽章;

因為我們最低要支援IE8,所以這方案也被斃掉了。

三、adobe PDF reader activeX

這是adobe提供的一個基於IE瀏覽器的PDF瀏覽外掛,並且提供了一些介面。具體呼叫方式如下:

var activeX="<object classid='clsid:CA8A9780-280D-11CF-A24D-444553540000' name='PdfViewer' id='PdfViewer' width='100%' height='720px'>"+
" <param name='toolbar' value='false'>"
+ " <param name='_Version' value='327680'>"+ " <param name='_ExtentX' value='19315'>"+ " <param name='_ExtentY' value='16034'>"+ " <param name='_StockProps' value='0'>"+ " <param name='SRC' value='http://localhost:8080/test/123.pdf'>"+ " <object>"; $("#pdfviewobj").html(activeX);

 Adobe Reader ActiveX的常用方法(Methods)

□ gotOFirstPage:到第一頁。

□ GotoLastPage:到最後一頁。

□ GotoNextPape:到。

□ GotopriciousPape:到。

□ Print:列印檔案。

□ PrintPages:列印指定頁。帶2個引數,第一個引數指定起始頁,第一個引數指定結

束頁。

□ Printwithdialog:列印檔案前先顯示印表機屬性對話方塊。

□ SetCurrentpage:到指定頁。帶一個引數,該引數指定要跳轉到的頁數。

□ setshowscrollbars:設定是否顯示Acrobat Reader的滾動條。帶一個引數,該引數設為0時不顯示滾動條,設為1時顯示滾動條。

□ SetshowTOolbar:設定是否顯示 Acrobat Reader的工具欄。帶一個引數,該引數設為0時不顯示,設為1時顯示。

□ setView:設定顯示效果。帶一個引數,該引數是一個字串,設為fit時將達到最佳顯示效果。

□ SetZoom:設定檔案的顯示比例。帶一個引數,該值為一個數值,比如設為90時,即為原視窗大小的90%。

優點:1、清晰度高;2、支援 電子簽章的展示(支援展示簽名信息);

缺點:1、需要安裝adobe PDF reader桌面端程式,客戶現場環境惡劣,偶爾出現安裝不成功;2、只支援IE瀏覽器;3、連續列印時,瀏覽器容易卡死


四、PDFBox生成圖片

優點:

1、無需安裝外掛;
2、瀏覽器相容性好;
3、清晰度高;
4、支援 電子簽章的展示(不支援展示簽名信息);

缺點:

生成圖片速度較慢,4頁的PDF需要6000毫秒;

如果PDF中的字型,在伺服器上未安裝,則會導致生成的圖片亂碼。