2013-06-28 08:22:20 +09:00
# PDF.js
2012-03-27 11:43:51 +09:00
2014-05-02 04:05:32 +09:00
PDF.js is a Portable Document Format (PDF) viewer that is built with HTML5.
2011-09-16 08:28:38 +09:00
2013-06-28 08:22:20 +09:00
PDF.js is community-driven and supported by Mozilla Labs. Our goal is to
create a general-purpose, web standards-based platform for parsing and
rendering PDFs.
2011-09-16 08:28:38 +09:00
2013-06-28 08:22:20 +09:00
## Contributing
2011-09-16 08:28:38 +09:00
2013-06-28 08:22:20 +09:00
PDF.js is an open source project and always looking for more contributors. To
2017-02-12 00:27:34 +09:00
get involved, visit:
2011-09-16 08:28:38 +09:00
2016-05-07 13:10:36 +09:00
+ [Issue Reporting Guide ](https://github.com/mozilla/pdf.js/blob/master/.github/CONTRIBUTING.md )
2015-04-25 18:35:56 +09:00
+ [Code Contribution Guide ](https://github.com/mozilla/pdf.js/wiki/Contributing )
+ [Frequently Asked Questions ](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions )
2013-06-28 08:22:20 +09:00
+ [Good Beginner Bugs ](https://github.com/mozilla/pdf.js/issues?direction=desc&labels=5-good-beginner-bug&page=1&sort=created&state=open )
2017-02-12 00:27:34 +09:00
+ [Projects ](https://github.com/mozilla/pdf.js/projects )
2013-06-28 08:22:20 +09:00
2017-02-12 00:27:34 +09:00
Feel free to stop by #pdfjs on irc.mozilla.org for questions or guidance.
2011-09-16 08:39:18 +09:00
2013-06-28 08:22:20 +09:00
## Getting Started
### Online demo
2011-09-16 08:28:38 +09:00
2016-11-04 23:55:56 +09:00
+ https://mozilla.github.io/pdf.js/web/viewer.html
2011-09-16 08:28:38 +09:00
2013-06-28 08:22:20 +09:00
### Browser Extensions
2011-09-16 08:28:38 +09:00
2016-06-17 23:01:32 +09:00
#### Firefox (and Seamonkey)
2011-10-25 02:40:36 +09:00
2017-07-24 01:57:19 +09:00
PDF.js is built into version 19+ of Firefox, however, one extension is still available:
2011-10-25 02:40:36 +09:00
2017-07-24 01:57:19 +09:00
+ [Development Version ](http://mozilla.github.io/pdf.js/extensions/firefox/pdf.js.xpi ) - This extension is mainly intended for developers/testers, and it is updated every time new code is merged into the PDF.js codebase. It should be quite stable but might break from time to time.
2016-06-17 23:01:32 +09:00
[Firefox addon] Change the minimum supported version to (the current) Firefox Nightly release
At this point in time, trying to keep the development addon compatible with prior Firefox versions is already quite difficult and will become even harder very soon.
Please keep in mind that since Firefox 57, only WebExtensions are allowed/possible to install. The only exceptions are Firefox Nightly, with the `xpinstall.signatures.required` preference[1] set to `false`, and the (as of this writing) current ESR release.[2]
With the current compatibility situation, we thus need to effectively support both Nightly *and* ESR in the addon, while trying to keep up with current/upcoming changes in `mozilla-central`. With old addons no longer being officially supported, the amount of old code being removed/refactored is now increasing quite quickly.
*Please note:* The changes proposed here was to a large extent prompted by bugs such as:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1431533 (already landed)
- https://bugzilla.mozilla.org/show_bug.cgi?id=767640 (already landed)
- https://bugzilla.mozilla.org/show_bug.cgi?id=1432992 (still open)
Upstreaming all of those changes for the `MOZCENTRAL` version of PDF.js, while also keeping the Firefox addon running in older versions of the browser, would quickly become non-trivial.
Since we're using the ruleset from `eslint-plugin-mozilla` for the addon files, which is enforced in `mozilla-central`, we must ensure that the neccessary changes are upstreamed to the PDF.js repo such that the `mozilla-central` version of PDF.js can still be updated without failures.
Trying to feature detect, for the `FIREFOX` build target, some of the changes in the referenced bugs would probably become both quite messy and (not to mention) difficult. E.g. with the upcoming and automatically defined `Cc, Ci, Cu, Cr` variables, any sort of feature detection might be tricky since those need to be defined in the global scope of the files in question.
Finally, given the amount of effort that we'd now need to spend to even attempt to keep the Firefox addon compatible, I just don't think it's worth the effort any more. Especially since the number of people that have, thus far, been doing this work is *very* low and those resources would be better spend elsewhere.
Unfortunately, this probably means that the development addon will no longer be compatible with release versions of Seamonkey. However the README has already mentioned, for quite some time, that support isn't guaranteed.
*In closing:* For all of the reasons mentioned above, I thus propose that we reduce the maintenance burden of the Firefox addon by only supporting the current Firefox Nightly.
---
[1] While the preference exists, and can be toggled, its value is ignored in non-Nightly versions of Firefox.
[2] There's unbranded builds of e.g. the release/beta versions of Firefox, where old and non-WebExtensions addons can be installed. However those builds can probably be assumed to be officially unsupported, and thus not recommended for users.
2018-02-04 20:20:54 +09:00
+ Please note that the extension is *not* guaranteed to be compatible with Firefox versions that are *older* than the current Nightly version, see the [Release Calendar ](https://wiki.mozilla.org/RapidRelease/Calendar#Past_branch_dates ).
2016-06-17 23:01:32 +09:00
[Firefox addon] Change the minimum supported version to (the current) Firefox Nightly release
At this point in time, trying to keep the development addon compatible with prior Firefox versions is already quite difficult and will become even harder very soon.
Please keep in mind that since Firefox 57, only WebExtensions are allowed/possible to install. The only exceptions are Firefox Nightly, with the `xpinstall.signatures.required` preference[1] set to `false`, and the (as of this writing) current ESR release.[2]
With the current compatibility situation, we thus need to effectively support both Nightly *and* ESR in the addon, while trying to keep up with current/upcoming changes in `mozilla-central`. With old addons no longer being officially supported, the amount of old code being removed/refactored is now increasing quite quickly.
*Please note:* The changes proposed here was to a large extent prompted by bugs such as:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1431533 (already landed)
- https://bugzilla.mozilla.org/show_bug.cgi?id=767640 (already landed)
- https://bugzilla.mozilla.org/show_bug.cgi?id=1432992 (still open)
Upstreaming all of those changes for the `MOZCENTRAL` version of PDF.js, while also keeping the Firefox addon running in older versions of the browser, would quickly become non-trivial.
Since we're using the ruleset from `eslint-plugin-mozilla` for the addon files, which is enforced in `mozilla-central`, we must ensure that the neccessary changes are upstreamed to the PDF.js repo such that the `mozilla-central` version of PDF.js can still be updated without failures.
Trying to feature detect, for the `FIREFOX` build target, some of the changes in the referenced bugs would probably become both quite messy and (not to mention) difficult. E.g. with the upcoming and automatically defined `Cc, Ci, Cu, Cr` variables, any sort of feature detection might be tricky since those need to be defined in the global scope of the files in question.
Finally, given the amount of effort that we'd now need to spend to even attempt to keep the Firefox addon compatible, I just don't think it's worth the effort any more. Especially since the number of people that have, thus far, been doing this work is *very* low and those resources would be better spend elsewhere.
Unfortunately, this probably means that the development addon will no longer be compatible with release versions of Seamonkey. However the README has already mentioned, for quite some time, that support isn't guaranteed.
*In closing:* For all of the reasons mentioned above, I thus propose that we reduce the maintenance burden of the Firefox addon by only supporting the current Firefox Nightly.
---
[1] While the preference exists, and can be toggled, its value is ignored in non-Nightly versions of Firefox.
[2] There's unbranded builds of e.g. the release/beta versions of Firefox, where old and non-WebExtensions addons can be installed. However those builds can probably be assumed to be officially unsupported, and thus not recommended for users.
2018-02-04 20:20:54 +09:00
+ The extension *may* also work in Seamonkey, provided that it is based on a Firefox version as above (see [Which version of Firefox does SeaMonkey 2.x correspond with? ](https://wiki.mozilla.org/SeaMonkey/FAQ#General )), but we do *not* guarantee compatibility.
2011-10-25 02:40:36 +09:00
2016-02-14 22:05:20 +09:00
#### Chrome
2013-08-21 23:50:17 +09:00
2015-06-06 23:05:00 +09:00
+ The official extension for Chrome can be installed from the [Chrome Web Store ](https://chrome.google.com/webstore/detail/pdf-viewer/oemmndcbldboiebfnladdacbdfmadadm ).
*This extension is maintained by [@Rob--W ](https://github.com/Rob--W ).*
2016-03-05 00:36:46 +09:00
+ Build Your Own - Get the code as explained below and issue `gulp chromium` . Then open
2013-06-28 08:22:20 +09:00
Chrome, go to `Tools > Extension` and load the (unpackaged) extension from the
2013-08-22 02:22:43 +09:00
directory `build/chromium` .
2011-10-25 02:40:36 +09:00
2013-06-28 08:22:20 +09:00
## Getting the Code
2011-09-25 18:44:29 +09:00
To get a local copy of the current code, clone it using git:
2015-05-09 04:19:45 +09:00
$ git clone git://github.com/mozilla/pdf.js.git
$ cd pdf.js
2011-09-25 18:44:29 +09:00
2015-05-09 04:19:45 +09:00
Next, install Node.js via the [official package ](http://nodejs.org ) or via
2016-03-05 00:36:46 +09:00
[nvm ](https://github.com/creationix/nvm ). You need to install the gulp package
globally (see also [gulp's getting started ](https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md#getting-started )):
2015-05-09 04:19:45 +09:00
2016-03-05 00:36:46 +09:00
$ npm install -g gulp-cli
If everything worked out, install all dependencies for PDF.js:
2015-05-09 04:19:45 +09:00
2016-03-05 00:36:46 +09:00
$ npm install
2015-05-09 04:19:45 +09:00
2017-07-24 01:57:19 +09:00
Finally, you need to start a local web server as some browsers do not allow opening
2017-06-24 19:24:18 +09:00
PDF files using a `file://` URL. Run:
2011-09-25 18:44:29 +09:00
2016-03-05 00:36:46 +09:00
$ gulp server
2011-09-25 18:44:29 +09:00
2017-06-24 19:24:18 +09:00
and then you can open:
2011-09-25 18:44:29 +09:00
2011-09-30 03:44:41 +09:00
+ http://localhost:8888/web/viewer.html
2011-09-25 18:44:29 +09:00
2017-06-24 19:24:18 +09:00
Please keep in mind that this requires an ES6 compatible browser; refer to [Building PDF.js ](https://github.com/mozilla/pdf.js/blob/master/README.md#building-pdfjs ) for usage with older browsers.
It is also possible to view all test PDF files on the right side by opening:
2011-09-25 18:44:29 +09:00
2011-09-30 03:44:41 +09:00
+ http://localhost:8888/test/pdfs/?frame
2011-09-25 18:44:29 +09:00
2013-06-28 08:22:20 +09:00
## Building PDF.js
2011-10-26 12:07:30 +09:00
2017-02-12 00:27:34 +09:00
In order to bundle all `src/` files into two production scripts and build the generic
viewer, run:
2011-10-26 12:07:30 +09:00
2016-03-05 00:36:46 +09:00
$ gulp generic
2011-10-26 12:07:30 +09:00
2013-09-06 05:05:02 +09:00
This will generate `pdf.js` and `pdf.worker.js` in the `build/generic/build/` directory.
Both scripts are needed but only `pdf.js` needs to be included since `pdf.worker.js` will
2017-05-22 19:56:27 +09:00
be loaded by `pdf.js` . The PDF.js files are large and should be minified for production.
2011-10-27 00:20:22 +09:00
2016-04-27 05:03:35 +09:00
## 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 and Bower under
the `pdfjs-dist` name. For more information and examples please refer to the
[wiki page ](https://github.com/mozilla/pdf.js/wiki/Setup-pdf.js-in-a-website ) on this subject.
2017-10-01 05:51:00 +09:00
## Including via a CDN
PDF.js is hosted on several free CDNs:
- https://www.jsdelivr.com/package/npm/pdfjs-dist
- https://cdnjs.com/libraries/pdf.js
- https://unpkg.com/pdfjs-dist/
2013-06-28 08:22:20 +09:00
## Learning
2011-09-25 18:44:29 +09:00
2017-07-24 01:57:19 +09:00
You can play with the PDF.js API directly from your browser using the live demos below:
2011-09-25 18:44:29 +09:00
2017-02-08 04:11:18 +09:00
+ [Interactive examples ](http://mozilla.github.io/pdf.js/examples/index.html#interactive-examples )
2011-09-16 08:39:18 +09:00
2017-02-12 00:27:34 +09:00
The repository contains a hello world example that you can run locally:
2011-09-16 08:28:38 +09:00
2012-10-16 01:06:19 +09:00
+ [examples/helloworld/ ](https://github.com/mozilla/pdf.js/blob/master/examples/helloworld/ )
2011-09-16 08:28:38 +09:00
2017-07-24 01:57:19 +09:00
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 `gulp dist-install` command.
2017-05-11 08:28:18 +09:00
2013-06-28 08:22:20 +09:00
For an introduction to the PDF.js code, check out the presentation by our
contributor Julian Viereck:
2011-10-27 00:20:22 +09:00
+ http://www.youtube.com/watch?v=Iv15UY-4Fg8
2017-02-12 00:27:34 +09:00
More learning resources can be found at:
2013-06-28 08:22:20 +09:00
2012-11-01 22:17:35 +09:00
+ https://github.com/mozilla/pdf.js/wiki/Additional-Learning-Resources
2011-07-03 01:28:13 +09:00
2013-06-28 08:22:20 +09:00
## Questions
2014-04-29 22:35:12 +09:00
Check out our FAQs and get answers to common questions:
+ https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions
2017-11-18 21:29:20 +09:00
Talk to us on IRC (Internet Relay Chat):
2011-06-17 01:37:15 +09:00
2011-09-30 03:44:41 +09:00
+ #pdfjs on irc.mozilla.org
2011-06-29 08:02:02 +09:00
2017-02-17 06:36:12 +09:00
File an issue:
2011-06-29 08:02:02 +09:00
2017-02-17 06:36:12 +09:00
+ https://github.com/mozilla/pdf.js/issues/new
2011-06-29 08:02:02 +09:00
2011-09-30 03:44:41 +09:00
Follow us on twitter: @pdfjs
2011-06-29 08:02:02 +09:00
2011-09-30 03:44:41 +09:00
+ http://twitter.com/#!/pdfjs