PDF.js
Template:Short description Template:DMCA
Page Module:Infobox/styles.css has no content.
| PDF.js | |
|---|---|
| Lua error in package.lua at line 80: module 'Module:InfoboxImage/data' not found. | |
| Lua error in package.lua at line 80: module 'Module:InfoboxImage/data' not found. PDF.js in Firefox 100, with a table of contents displayed on the sidebar | |
| [[Programmer|Original authorTemplate:Pluralize from text]] | Andreas Gal |
| [[Programmer|DeveloperTemplate:Pluralize from text]] | Mozilla |
| Initial release | Script error: No such module "Date time".[1] |
| Written in | JavaScript, CSS, HTML |
| Engine | Page Template:Plainlist/styles.css has no content.Template:EditAtWikidata |
| Platform | JavaScript engine, web browser |
| Size | 3.94 MB[1] |
| Type | PDF viewer |
| License | Apache License 2.0[2] |
| Website | mozilla |
| Repository | Page Template:Plainlist/styles.css has no content.
|
Script error: No such module "Check for conflicting parameters".
PDF.js is a JavaScript library that renders Portable Document Format (PDF) files using the web standards-compliant HTML5 Canvas. The project is led by the Mozilla Corporation after Andreas Gal launched it (initially as an experiment) in 2011.
History and application
PDF.js was originally created as an extension for Firefox[3] and is included in Firefox since 2012 (version 15),[4][5] and enabled by default since 2013 (version 19).[6][7] It was added to Firefox for Android in 2023 (version 111).[8][9]
The project was created to provide a way for viewing PDF documents natively in the web browser, which prevents potential security risks when opening PDF documents outside a browser, as the code for displaying the document is sandboxed in a browser.[10] Its implementation uses the Canvas element from HTML5, which allows for fast rendering speeds.[10]
PDF.js is also used in Thunderbird,[11] ownCloud,[12] Nextcloud,[13][14] and is available as a browser extension for Google Chrome/Chromium,[15] Pale Moon[16][17] and SeaMonkey.[17][18]
It can be integrated or embedded in a web or native application to enable PDF rendering and viewing, and allows advanced usages such as Server-side rendering.
Many web applications, including Dropbox,[19] Slack,[20] and LinkedIn Learning[21] integrate PDF.js to enable previewing PDF documents.
Behavior
According to a benchmark by Mozilla, PDF.js is performant for viewing most common PDF files, while it may have some issues with large or 'graphics-heavy' documents.[22]
PDF.js supports most of the PDF specifications (including form support or XFA[23]), but some features have not been implemented yet, which may impact rendering behavior depending on the features the document uses.[24]
Several PDF/X or optional PDF features that are not supported in PDF.js include:
- ICC Color Profiles[25]
- Spot colors
- Overprint simulation[26]
- Transparency groups (knockout/isolation)[27]
- High-fidelity printing
The PDF.js contributor community also notes that the browser behavior of PDF.js varies with browser support for PDF.js's required features.[28] Performance and reliability will be the best on Chrome and Firefox, which are fully supported and subject to automated testing.
Security
Because PDF.js parses untrusted documents inside the browser, it has been the subject of several disclosed vulnerabilities. In 2015, CVE-2015-2743 documented excessive privileges for internal workers in PDF.js, which was addressed in Firefox 39 and the ESR branches 31.8 and 38.1.[29][30] A related Metasploit module exploited a privileged JavaScript injection in Firefox 35 and 36 through the PDF viewer.[31]
In 2018, CVE-2018-5158 disclosed that PDF.js did not sufficiently sanitize PostScript calculator functions, allowing crafted PDF files to inject JavaScript with the privileges of the embedding page.[32][33][34]
A more widely reported issue, CVE-2024-4367, was disclosed in May 2024 by researchers at Codean Labs.[35] The vulnerability stems from a missing type check in PDF.js font handling, where a custom FontMatrix embedded in PDF metadata could be coerced into a string and reach eval, enabling arbitrary JavaScript execution within the PDF.js context.[36] Mozilla addressed the issue in PDF.js 4.2.67, Firefox 126, Firefox ESR 115.11 and Thunderbird 115.11.[37] National advisories were issued by the New York State Office of Information Technology Services and the Cyber Security Agency of Singapore.[38][39]
See also
Lua error in mw.title.lua at line 404: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').
References
Page Template:Reflist/styles.css has no content.
- ^ a b Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ a b Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ a b Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- ^ Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
External links
- Script error: No such module "Official website".
- Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
- Lua error in package.lua at line 80: module 'Module:Citation/CS1/Utilities' not found.
Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found.