pdf.js簡(jiǎn)介
廣告:
PDF.js 是基于開放的 HTML5 及 JavaScript 技術(shù)實(shí)現(xiàn)的開源產(chǎn)品。簡(jiǎn)單說就是一個(gè) PDF解析器。運(yùn)用HTML5JavaScript(即pdf.js僅使用安全的web語言,不包含任何攻擊者可以用的本地代碼塊)的PDF閱讀器pdf.js,直接在標(biāo)準(zhǔn)的HTML頁面上載入和渲染PDF文件, 還可以提高安全性(不需要安裝第三方插件,安全性由瀏覽器保證),瀏覽器所做的安全措施已經(jīng)為pdf.js提供了安全的運(yùn)行環(huán)境。其對(duì)IE和 FireFox瀏覽器的要求是IE9+, FireFox19+。
在線示例: http://jsbin.com/pdfjs-helloworld-v2/1/edit
http://jsbin.com/pdfjs-prevnext-v2/1/edit
源碼:https://github.com/mozilla/pdf.js
官網(wǎng):http://mozilla.github.io/pdf.js/
pdf.js VS 傳統(tǒng)瀏覽器讀取pdf
一般來說,PDF檔案格式都是在瀏覽器中由外掛程式來描繪,通常是Adobe自己的PDF
reader或來自其他供應(yīng)商的描繪工具,但這些外掛通常無法充分運(yùn)用PDF的特點(diǎn),而且由于含有大量的受信任代碼,使得Google
Chrome瀏覽器必須運(yùn)用SandBox沙箱原理,來檢查PDF描繪工具是否遭到未知病毒感染。
使用adobe,必須在本地安裝軟件才能使用,而pdf.js不依賴環(huán)境、渲染速度快(測(cè)試過,確實(shí)很快)、安全性高。
pdf.js渲染PDF文件
pdf.js渲染PDF文件的流程:Fetch pdf (url / buffer) ——> canvas ——> 渲染
如果要深入pdf的渲染,需要去研究pdf.js源代碼。pdf.js可通過pdf文件的地址或pdf數(shù)據(jù)流獲取pdf,具體實(shí)現(xiàn)是調(diào)用接口函數(shù) PDFJs.getDoc(url/buffer)將pdf載入html,通過canvas處理, 然后渲染pdf文件。網(wǎng)上給出的都是通過url來獲取pdf的例子,而我在做項(xiàng)目的時(shí)候,后臺(tái)(Python)要求是發(fā)pdf的數(shù)據(jù)流給前臺(tái),前臺(tái)接收pdf的buffer,然后通過pdf.js來渲染。當(dāng)然最初嘗試buffer出現(xiàn)了很多問題,具體問題總結(jié)如下:
1)如何通過$.ajax接收后臺(tái)發(fā)給前臺(tái)的buffer數(shù)據(jù);
2)如何將buffer傳給pdf.js來處理(這里我使用了viewer.js, 所以需要考慮的是如何將buffer傳給viewer.js來處理);
3)如何將pdf.js轉(zhuǎn)換成pdf.js可以接收的buffer格式;
(對(duì)應(yīng)問題解決見代碼注釋)
注:viewer.js是pdf.js的擴(kuò)展,其將打印、翻頁、縮放等功能進(jìn)行了實(shí)現(xiàn),且界面非常好看。也就是說如果你引入了viewer.js,pdf的渲染和渲染之后的功能界面都已經(jīng)幫你實(shí)現(xiàn)了,你不用自己去寫界面。
先從官網(wǎng):http://mozilla.github.io/pdf.js/ 下載代碼,然后使用文件viewer.html
廣告:


