pdf.js 入門使用指南1-安裝篇
阿新 • • 發佈:2018-11-25
最近由於工作需要,需要一個功能線上瀏覽pdf。經過初步篩選,選定了pdf.js.可以滿足我們所有的功能需求。
一:先簡要概括一下優缺點
優點總結:
- 免費,開源的。這點很重要
- 純js實現,客戶不需要安裝額外的外掛
- 功能強大,縮放,列印,查詢功能應有盡有
- 相容主流瀏覽器,火狐,谷歌,ie9+都支援
缺點總結
1:js 檔案偏大,載入一起3m 多,即便壓縮後,兩個核心js 檔案也在1m左右。會影響載入速度
2:引文使用H5 技術,ie8 以及ie8 以下的瀏覽器不支援。
二:下載和安裝
1:進入官網下載地址:
http://mozilla.github.io/pdf.js/getting_started/#download
建議下載最新版,目前最新版本為1.9,建議下載正式版
ps:1.8版本以及以上可以相容,目前的qq瀏覽器,低版本qq瀏覽器可能會不能顯示。
官網是國外的,開啟可能比較滿,也可以從下面的國內映象站下載
http://download.csdn.net/download/amu0521/10107388?web=web
2:下載後,解壓檔案,進入build 目錄
複製pdf.js 和pdf.worker.js,這兩個檔案到我們的網站目錄
3:編輯檔案,顯示簽名。本步驟非必須。
開啟pdf.worker.js ,搜尋 data.fieldType === ‘Sig’ ,定位到大約28728行,註釋掉下面的一行程式碼,如圖
儲存即可。
4:編寫測試網頁,顯示pdf
<html>
<head>
<title>pdf.js展示1,上一頁,下一頁</title>
</head>
<h1>PDF.js Previous/Next example</h1>
<div>
<button id="prev">Previous</button>
<button id="next">Next</button>
<span >Page: <span id="page_num"></span> / <span id="page_count"></span></span>
</div>
<canvas id="the-canvas"></canvas>
<script src="js/pdf.js"></script>
<script src="js/pdf.worker.js"></script>
<script>
var url = '/pdf/doc/demo1.pdf';
var pdfDoc = null,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 0.8,
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');
/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
pageRendering = true;
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for rendering to finish
renderTask.promise.then(function() {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Update page counters
document.getElementById('page_num').textContent = num;
}
/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
/**
* Displays previous page.
*/
function onPrevPage() {
if (pageNum <= 1) {
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
/**
* Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) {
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
/**
* Asynchronously downloads PDF.
*/
PDFJS.getDocument(url).then(function(pdfDoc_) {
pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages;
// Initial/first page rendering
renderPage(pageNum);
});
</script>
</html>
執行效果如下圖
程式碼來自官方例項,進行了整理
http://mozilla.github.io/pdf.js/examples/
提示:
1:請執行在虛擬伺服器上,比如apache或iis等,否則可能會顯示不出來效果。
2:pdf 檔案為任何pdf檔案即可,網站演示的pdf檔案從網上下載的,如果侵權,請留言。
附上demo 目錄結構