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中的字型,在伺服器上未安裝,則會導致生成的圖片亂碼。