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