pdf.js框架的魅力所在,為其為HTML5實(shí)現(xiàn)的,無(wú)需任何本地支持,而且對(duì)瀏覽器的兼容性也是比較好,要求只有一個(gè):瀏覽器支持HTML5就好了?。ú贿^對(duì)于低版本的IE,就只能節(jié)哀了?。?br>
據(jù)說IE9以上是OK的,因?yàn)槲冶镜厥荌E11,所以我只在IE11上測(cè)試過,是通過的(當(dāng)然火狐,360,我也測(cè)了一下,是可以的)。
因?yàn)轫?xiàng)目開發(fā)需要,在線展示PDF,而且要兼容IE,所以就選擇了pdf.js,但是網(wǎng)上對(duì)他的教程很少,我花了一天時(shí)間才搞定,回頭看了一下,也沒有想象中那么困難,所以決定寫一篇博客,以便大家參考!
以下是pdf.js相關(guān)的網(wǎng)址:
GitHub: https://github.com/mozilla/pdf.js/
上面這個(gè)網(wǎng)址,有pdf.js的基本簡(jiǎn)介,以及如何獲取源碼,之后如何進(jìn)行構(gòu)建!
?git?clone?git://github.com/mozilla/pdf.js.git
構(gòu)建使用:
?node?make?generic
下面我就介紹下,具體嵌入項(xiàng)目中是如何運(yùn)用的!
可以把generic中的內(nèi)容作為第三方插件進(jìn)行使用,在項(xiàng)目中可以像如下存放:
我是放在plugins下的,把generic下的build和web、LICENSE都復(fù)制過來(lái)
項(xiàng)目結(jié)構(gòu):
http://localhost:8080/TestWeb/resources/plugins/pdfJs/web/viewer.htmll?file=【?】.pdf
【?】問號(hào)是輸入pdf的所在的位置
頁(yè)面代碼如下:
<%@?pagelanguage="java"contentType="text/html;?charset=utf-8"
pageEncoding="utf-8"%>
<%@?taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
在線顯示PDF
src="?file=">
顯示效果:
這就可以在線閱讀pdf了,是不是很簡(jiǎn)單!

Ps:
我們?cè)趯?shí)際應(yīng)用中,可能會(huì)根據(jù)不同的參數(shù),來(lái)選擇展示不同的pdf文件,此時(shí)就涉及到傳參的問題了,仔細(xì)觀察上面這段url地址會(huì)發(fā)現(xiàn),在file請(qǐng)求參數(shù)中的值為一個(gè)url地址,而這個(gè)url地址又追加了自己的請(qǐng)求參數(shù),這就導(dǎo)致一個(gè)url地址中出現(xiàn)2個(gè)"?"
導(dǎo)致瀏覽器不能正常解析這段url!
一種解決思路是:我們可以把file形參的值,先編碼,然后再解碼來(lái)解決這個(gè)問題!
此時(shí),就可以請(qǐng)encodeURIComponent()函數(shù)出場(chǎng)了!因?yàn)槠錇閖s函數(shù),所以需要在文檔就緒函數(shù)中動(dòng)態(tài)為iframe設(shè)置src的值,如下所示:
<%@?pagecontentType="text/html;charset=utf-8"language="java"%>
<%@?taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
$(function(){$("#displayPdfIframe").attr("src",'plugins/pdfJs/web/viewer.html"/>?file='?+?encodeURIComponent(''));
});
當(dāng)然,既然有編碼,那么就一定要有解碼來(lái)解析他,不過這個(gè)工作generic/web/viewer.js已經(jīng)替我們做過了,如下所示: