# 第三方程式庫 全部放在本站,不從 CDN 載入。查證日期:**2026-11-09**(版本與授權取自 npm 官方套件庫的套件中繼資料與套件內的 LICENSE 檔)。 沒有使用任何 AGPL 授權的程式。 | 程式庫 | 版本 | 授權 | 來源 | 發布日 | |---|---|---|---|---| | pdf.js(pdfjs-dist) | 6.5.438 | Apache-2.0 | https://github.com/mozilla/pdf.js ・ https://www.npmjs.com/package/pdfjs-dist | 2026-11-01(npm `latest`) | | pdf-lib | 1.17.1 | MIT | https://github.com/Hopding/pdf-lib ・ https://www.npmjs.com/package/pdf-lib | 2021-11-06(npm `latest`,之後沒有新版) | | JSZip | 3.10.2 | MIT 或 GPL-3.0-or-later 擇一,**本站選用 MIT** | https://github.com/Stuk/jszip ・ https://www.npmjs.com/package/jszip | 2026-09-08(npm `latest`) | | qpdf-wasm(@neslinesli93/qpdf-wasm,內含 qpdf 12.2.0) | 0.3.1 | ISC(包裝);qpdf 本體 Apache-2.0 | https://github.com/neslinesli93/qpdf-wasm ・ https://www.npmjs.com/package/@neslinesli93/qpdf-wasm ・ https://github.com/qpdf/qpdf | 2026-11-03(npm `latest`,2026-11-11 查證) | 下載方式:`npm pack pdfjs-dist@6.5.438 pdf-lib@1.17.1 jszip@3.10.2 @neslinesli93/qpdf-wasm@0.3.1`,解開後複製以下檔案。 qpdf-wasm 0.3.1 與工具箱(gongwu-calc)用的 0.3.0 差別只有「加入 build provenance」(GitHub 發行說明),兩版內含的 qpdf 都是 12.2.0(從 wasm 內的版本字串確認),JS 外殼一字不差。 ## 檔案對照 | 本站路徑 | 套件內原路徑 | 備註 | |---|---|---| | `pdfjs/pdf.min.js` | `pdfjs-dist/build/pdf.min.mjs` | **改了副檔名**:.mjs → .js,內容未改。避免主機不認得 .mjs 而用錯 MIME(加上 nosniff,ES module 會被瀏覽器拒絕載入) | | `pdfjs/pdf.worker.min.js` | `pdfjs-dist/build/pdf.worker.min.mjs` | 同上 | | `pdfjs/cmaps/` | `pdfjs-dist/cmaps/` | 中日韓字型的 CMap,少了它中文 PDF 抽不到字 | | `pdfjs/standard_fonts/` | `pdfjs-dist/standard_fonts/` | Foxit 字型(BSD 式授權,見 LICENSE_FOXIT)、Liberation 字型(GPLv2 附字型例外,見 LICENSE_LIBERATION) | | `pdfjs/wasm/` | `pdfjs-dist/wasm/` | JPEG2000(OpenJPEG,BSD-2)、JBIG2(PDFium,BSD-3)、色彩管理(qcms,MIT)的 WebAssembly 解碼器與純 JS 備援。**刻意不放** `quickjs-eval.*`(PDF 內嵌 JavaScript 用,本站不執行 PDF 裡的程式) | | `pdfjs/iccs/` | `pdfjs-dist/iccs/` | CMYK 色彩描述檔(CC0) | | `pdfjs/LICENSE` | `pdfjs-dist/LICENSE` | | | `pdf-lib/pdf-lib.min.js` | `pdf-lib/dist/pdf-lib.min.js` | UMD,掛在 `window.PDFLib` | | `pdf-lib/LICENSE.md` | `pdf-lib/LICENSE.md` | | | `jszip/jszip.min.js` | `jszip/dist/jszip.min.js` | UMD,掛在 `window.JSZip` | | `jszip/LICENSE.md` | `jszip/LICENSE.markdown` | | | `qpdf/qpdf.js`、`qpdf/qpdf.wasm` | `@neslinesli93/qpdf-wasm/dist/` | 只有遇到加密 PDF 才載入(約 1.4MB)。在本機解密、把輸出檔以 AES-256 加密 | | `qpdf/LICENSE` | `@neslinesli93/qpdf-wasm/LICENSE` | | ## SHA-256 ``` 3a88402882cfa3e7e72c2c9b5149f52f0f88baf1c5b62aa11a41abdbc2072440 pdfjs/pdf.min.js 1e64c8240e54735ec5913b37acd5134747799cb8c6bb3777c70adbc01232d2aa pdfjs/pdf.worker.min.js 0f9a5cad07941f0826586c94e089d89b918c46e5c17cf2d5a3c6f666e3bc694f pdf-lib/pdf-lib.min.js 7f839b2d4688b845c105ebf5d2f9803075f91ea0fe72bdaac176c3a04dd3d2c1 jszip/jszip.min.js c0e8fe62e0c3385dd8cb5d6b613f74d87a4138a3a3343e2add45a067a14d0884 qpdf/qpdf.js 69a17eecb26ef73e6b853487500802b18523c7b453382de0063bb2d387edb6bd qpdf/qpdf.wasm ``` ## 升級時要注意 - pdf.js 的 `getDocument` 選項(`cMapUrl`、`standardFontDataUrl`、`wasmUrl`、`iccUrl`)在 `app/app.js` 頂端,路徑一律組成絕對網址(worker 裡抓的,相對路徑會 404)。 - 升級後跑 `npm test`:e2e 會在 CSP 下實際解一張 JPEG2000 影像,確認 wasm 解碼器沒被擋。 - 檔名沒有帶版本號,`_headers` 對 `/vendor/*` 只快取一天。