紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, React, 工作雜談, 新手 Jamp Holes, 未分類, 網站相關, 資訊相關

[新手教學] JavaScript PDF

身為新手工程師,想必對於實作前端網頁設計時,經常會需要處理PDF檔案的各種操作,像是列印、合併、瀏覽等功能。沒有適當的PDF工具,這些常見需求就難以實現。在JavaScript的世界裡,有一個強大的開源PDF庫,可以讓你在網頁上輕鬆整合PDF相關功能,那就是PDF.js!

PDF.js是什麼?

PDF.js是由Mozilla團隊打造的HTML5 JavaScript庫,旨在提供能夠在網頁環境中呈現和操作PDF檔案的能力。它的運作原理是利用HTML5的Canvas將PDF內容呈現在網頁上,並提供多種API可供開發者調用,實現例如滾動、縮放、列印等基本操作。

使用PDF.js的最大好處就是可以完全在瀏覽器端處理PDF,免去下載外掛程式的麻煩。對於現代網頁應用來說,無縫整合PDF體驗將變得輕而易舉。

官方連結: https://mozilla.github.io/pdf.js/

官方 Demo : https://github.com/mozilla/pdf.js#online-demo

怎麼使用PDF.js?

  1. 引入庫文件

首先,你需要在HTML引入PDF.js提供的js檔案,官網上有CDN和npm安裝兩種選擇。舉例來說,可以直接在<head>引入:

<script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>

使用npm安裝

如果是在現代網頁應用開發中使用PDF.js,建議透過npm套件管理器安裝:

首先確認已安裝Node.js和npm,然後在專案根目錄執行:

npm install pdfjs-dist

安裝完成後,即可在JavaScript檔案中import使用:

import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf';
pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdfjs-dist/build/pdf.worker.min.js';

import * as pdfjsLib from ‘pdfjs-dist/legacy/build/pdf’;
pdfjsLib.GlobalWorkerOptions.workerSrc = ‘pdfjs-dist/build/pdf.worker.min.js’;

  1. 準備容器元素

接著在HTML中準備一個容器,等一下PDF檔案內容就會渲染在這裡,通常是<div>:

<div id="pdf-viewer"></div>
  1. 撰寫JavaScript代碼

最後就是撰寫JavaScript代碼了,利用PDF.js提供的API,從指定PDF檔案路徑開始渲染:

pdfjsLib.getDocument('path/to/pdf.pdf').promise.then(doc => {
    doc.getPage(1).then(page => {
        let viewport = page.getViewport({scale: 1});
        let canvas = document.getElementById('pdf-viewer');
        let context = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        page.render({
            canvasContext: context,
            viewport: viewport
        });
    })
})

上述範例示範了如何使用PDF.js庫載入PDF檔案的第一頁,並將內容呈現在名為pdf-viewer的div中。你可以依需求調整縮放比例、頁數等參數。

除了基本渲染功能外,PDF.js還提供了豐富的API,可實現縮放、滾動、列印、註解、分割等多種PDF檔案操作。這些功能將大幅強化你的網頁應用,提供更佳的PDF檔案整合和體驗。

後記

在網頁前端工程中,常常需要處理PDF檔案,無論是單純檢視或是進階的合併、編輯等。有了PDF.js這個強大的JavaScript庫,就可以輕鬆整合各種PDF相關功能。對於新手來說,熟悉這個工具的使用將是提升自身技能的一大利器。現在就開始學習PDF.js,打造專業又與眾不同的網頁應用吧!

發表迴響