pdf.js README

The project's README from github.com/mozilla/pdf.js. As one markdown file: README.md.

PDF.js CI codecov

PDF.js is a Portable Document Format (PDF) viewer that is built with HTML5.

PDF.js is community-driven and supported by Mozilla. Our goal is to create a general-purpose, web standards-based platform for parsing and rendering PDFs.

Contributing

PDF.js is an open source project and always looking for more contributors. To get involved, visit:

Feel free to stop by our Matrix room for questions or guidance.

Getting Started

Online demo

Please note that the "Modern browsers" version assumes native support for the latest JavaScript features; please also see this wiki page.

[!NOTE] Open new files via the menu (the ">>" icon) or by dragging and dropping.

Browser Extensions

Firefox

PDF.js is built into version 19+ of Firefox.

Chrome

PDF debugger

Browse the internal structure of a PDF document with https://mozilla.github.io/pdf.js/internal-viewer/web/debugger.html

Getting the Code

To get a local copy of the current code, clone it using git:

$ git clone https://github.com/mozilla/pdf.js.git
$ cd pdf.js

Next, install Node.js via the official package or via nvm. If everything worked out, install all dependencies for PDF.js:

$ npm install

Finally, you need to start a local web server as some browsers do not allow opening PDF files using a file:// URL. Run:

$ npx gulp server

and then you can open:

Please keep in mind that this assumes the latest version of Mozilla Firefox; refer to Building PDF.js for non-development usage of the PDF.js library.

It is also possible to view all test PDF files on the right side by opening:

Building PDF.js

In order to bundle all src/ files into two production scripts and build the generic viewer, run:

$ npx gulp generic

If you need to support older browsers, run:

$ npx gulp generic-legacy

This will generate pdf.js and pdf.worker.js in the build/generic/build/ directory (respectively build/generic-legacy/build/). Both scripts are needed but only pdf.js needs to be included since pdf.worker.js will be loaded by pdf.js. The PDF.js files are large and should be minified for production.

Code coverage

We track how much of the code is exercised by the test suite on Codecov (see the badge at the top of this file).

How it is collected

When coverage is enabled, the build instruments the bundled code with babel-plugin-istanbul, which adds counters that record every line, branch and function that runs:

Collecting coverage locally

Add the --coverage flag to any of the test tasks, for example:

$ npx gulp unittest --coverage           # browser unit tests
$ npx gulp unittestcli --coverage        # Node unit tests
$ npx gulp integrationtest --coverage    # Puppeteer integration tests
$ npx gulp botbrowsertest --coverage     # reference tests

The following options control the output:

Option Description Default
--coverage Enable coverage collection. off
--coverage-output <dir> Directory where the report is written. build/coverage
--coverage-formats <list> Comma-separated list of formats: info, html, json, text, cobertura, clover. info
--coverage-per-test Also build a per-test index (see below). off

By default the report is written to build/coverage in the info format, i.e. an LCOV lcov.info file (the same format that is uploaded to Codecov). Use --coverage-formats html to get a browsable HTML report instead, or pass several formats at once, e.g. --coverage-formats info,html.

Finding which tests cover a given line

coverage_search lists the ref tests that exercised a specific source line or function. It uses the per-test index (per-test-index.json) that is rebuilt on every push to master and published to the pdf.js.refs repository. The index is downloaded on demand, cached locally, and only re-downloaded when it has changed, so no local coverage build is required:

$ npx gulp coverage_search --code="canvas.js::205"
$ npx gulp coverage_search --code="canvas.js::drawImageAtIntegerCoords"

To run — or regenerate the reference images for — only the ref tests that touch a given line or function, pass the same --code option to a browser test or makeref task:

$ npx gulp browsertest --code="canvas.js::205"
$ npx gulp makeref --code="canvas.js::205"

Pass --no-download to reuse the locally cached index without contacting the network. The index can also be built and queried locally (the CI job that publishes it builds it the same way):

$ npx gulp botbrowsertest --coverage-per-test
$ npx gulp coverage_search --code="canvas.js::205" \
    --index=build/coverage/per-test-index.json --no-download

Continuous integration

On every push and pull request three GitHub Actions workflows collect coverage and upload it to Codecov, each tagged with its own Codecov flag so the test types can be told apart:

Workflow Task Codecov flag
unit_tests.yml unittest unittest
integration_tests.yml integrationtest integrationtest
coverage_browser_tests.yml botbrowsertest browsertest

Using PDF.js in a web application

To use PDF.js in a web application you can choose to use a pre-built version of the library or to build it from source. We supply pre-built versions for usage with NPM under the pdfjs-dist name. For more information and examples please refer to the wiki page on this subject.

Including via a CDN

PDF.js is hosted on several free CDNs:

Learning

You can play with the PDF.js API directly from your browser using the live demos below:

More examples can be found in the examples folder. Some of them are using the pdfjs-dist package, which can be built and installed in this repo directory via npx gulp dist-install command.

For an introduction to the PDF.js code, check out the presentation by our contributor Julian Viereck:

More learning resources can be found at:

The API documentation can be found at:

Questions

Check out our FAQs and get answers to common questions:

Talk to us on Matrix:

File an issue:

pdf.js (mozilla/pdf.js)

Searching Database…

54K ·GitHub
这是什么?PDF.js 是一个用 HTML5 打造的 PDF 查看器,由社区驱动、Mozilla 支持。它的目标是打造一个通用的、基于 Web 标准的平台,用来解析和渲染 PDF。
我是把它当现成的查看器用,还是当库嵌入?都可以:既有完整的查看器可以构建运行,也有通过 npm 以 pdfjs-dist 名称发布的预构建库,可以在网页应用中直接使用。
我怎么从源码把查看器跑起来?克隆仓库,运行 npm install,然后用 npx gulp server 启动开发服务器,再在浏览器里打开 —— 有些浏览器会拦截来自 file:// 地址的 PDF 文件。
我需要先装好哪些东西?需要 Git 和较新的 Node.js —— 仓库要求 Node >=22.22.3、>=24.15.0 或 >=26。其他依赖都会通过 npm 安装。
构建生产版本时有什么要注意的?构建会生成两个脚本:pdf.js 和 pdf.worker.js —— 只需引入 pdf.js,因为它会自己加载 worker。这些文件比较大,生产环境记得做压缩。
所有浏览器都能用吗?面向现代浏览器的构建假定支持最新的 JavaScript 特性;针对旧浏览器有单独的 generic-legacy 构建。另外从 Firefox 19 起,它就已经内置在 Firefox 里了。
我不装任何东西也能试用吗?可以 —— README 里有针对新旧浏览器的在线演示链接。可以通过菜单(“>>” 图标)打开新文件,也可以直接拖放文件进去。
有 Chrome 扩展吗?有,Chrome 网上应用店里有官方版本。你也可以自己构建:运行 npx gulp chromium,然后从 build/chromium 加载未打包的扩展。
PDF 调试器是干什么用的?它可以用来查看 PDF 文档的内部结构。
Creator
mozilla
Size
193.3 MB
Stars
54K
Age
15y
Commits · 90 Days