在網頁中加載並顯示PDF文件是最常見的業務需求。例如以下應用場景:(1)在電商網站上購物之后,下載電子發票之前先預覽發票。(2)電子政務管理系統中查看發布的公文,公文文件一般是PDF格式的文件。
目前隨着瀏覽器技術發展的不斷成熟與強大,大部分的瀏覽器都支持直接把PDF文件拖到瀏覽器中顯示,最方便的是這個操作不需要額外的插件支持。但是不同的瀏覽器加載顯示PDF的效果不同。這時就需要專門的JS插件來處理。Mozilla開源了一個插件pdf.js,無需任何本地支持就可以在所有主流的瀏覽器上顯示PDF文檔,使用起來十分的方便。唯一的要求就是瀏覽器必須支持HTML5。

1、下載至本地:
2、解壓縮,里面包含2個目錄
build目錄包含以下內容,其中pdf.js是核心文件
web目錄包含以下內容,其中viewer.html是pdf查看器
3、在VS中打開viewer.html,引用了查看其的樣式文件viewer.css、pdf.js核心文件、查看器腳本文件viewer.js 、資源文件local.properties。
4、直接在瀏覽器中打開viewer.html,能正常的顯示pdf查看器,但是無法顯示pdf文件。
必須將 pdfjs-2.2.228-dist 包,部署在IIS上之后,通過http方式訪問才能正常的加載顯示pdf格式文件的內容
5、在IIS中部署之后,通過 http://localhost:8033/pdfjs/web/viewer.html 方式訪問該查看器。該查看器中默認加載的是 pdf.js 的使用說明書內容。
打開viewer.js, 可以看到默認文件指向了“compressed.tracemonkey-pldi-09.pdf”
將解壓縮的內容復制到項目中

有多種方式加載加載並查看pdf文件內容。
方式1:通過鏈接方式,在viewer.html頁面中獨立獨立查看【通過文件路徑】
實現方法:通過<a/> 標簽鏈接到viewer.html頁面,需要傳遞一個重要的參數【file】,設置為要顯示的pdf文件的路徑
<a href="Content/pdfjs-2.2.228/web/viewer.html?file=http://localhost:8033/PDFTest/Pdf/項目的5個管理過程組和項目管理知識領域映射關系.pdf">
點擊查看pdf內容</a>
點擊a鏈接,打開獨立的窗口
方式2:嵌入在網頁中【通過文件路徑】
某些場景下需要將PDF查看器集成在業務網頁中,便於業務流程的操作
實現方法:通過iframe實現。任然需要傳遞file參數,設置pdf文件的路徑
<div id="divPdfViewPanel2" style="margin: 5px;"> <iframe src="Content/pdfjs-2.2.228/web/viewer.html?file=http://localhost:8033/PDFTest/Pdf/項目的5個管理過程組和項目管理知識領域映射關系.pdf" width="100%" height="400px;"></iframe> </div>
但是該方法把pdf文件寫死了。正常情況下都是通過程序動態的設置pdf文件,這時就需要使用Ajax動態的讀取數據庫或者從其他地方傳遞過來並設置該file參數。下面的方法通過JQuery動態的獲取並設置了需要加載顯示的pdf文件。
該方式經測試,加載100M左右的PDF文件,速度非常快。
查看 viewer.js,如下圖紅色方框內的邏輯,可以知道 pdf.js 支持通過 PDF文件路徑以及 PDF文件流的方式來加載顯示。

網絡上有很多的方法,通過讀取PDF文件流來實現。如果有業務需求,大家可以嘗試。
在第二大部分中介紹的2種方法,通過HTTP方式實現,這里涉及到跨域問題。如果PDF文件與網站部署在一起,則不存在跨域。如果PDF在網站之外,則涉及到跨域問題。打開viewer.js文件,注釋掉以下內容。
關於跨域問題處理,請參考作者的《使用 pdf.js 跨域問題的處理方法1》
還有其他方式也可以實現跨域,網絡上有很多優秀的解決方案。但是上述的方法最簡單直接。
關於跨域的詳細信息,可以參考 https://www.cnblogs.com/ranyonsue/p/11770769.html。
viewer.html 查看器的菜單功能按鈕的顯示都是英文的

在 pdfjs-2.2.228\web\locale目錄下列出了很多種語言的資源包,其中包含中文的zh-CN漢化資源包。里面包含了對應的漢化信息。
該如何加載該中文資源包呢?
在viewer.html 頁面中引用了locale/locale.properties 文件。仔細觀察,該文件的后綴名為 .properties。
在瀏覽器中瀏覽 viewer.html 網頁,顯示正常。但是F12調試,【Console】窗口中顯示了一個錯誤信息,提示:加載 locale.properties 資源文件失敗。
很奇怪啊,資源文件確實存在,為什么找不到呢?原來是 IIS 中 “MIME 類型” 中沒有 .properties 類型,所以就無法解析該類型問題。
手動添加該類型
添加完成后,重新刷新網頁,功能菜單全部顯示中文了。完美!
還有一種方法就是手動修改viewer.html 文件。打開viewer.html,修改其中所有菜單的 title 與 span 的內容
全部修改完成后,保存,再次在瀏覽器中查看,菜單也顯示為中文。但是該方法比較麻煩而且有可能漢化不完整,建議使用第一種漢化包的方式。