PDF.js FAQs
- Can I specify a different PDF in the default viewer?
- Can I load a PDF from another server (cross domain request)?
- Which browsers are supported?
- Which browsers have extensions (and where can I find install procedures)?
- I know JavaScript and want to contribute to the project. How do I start?
- Is it possible to add annotations to a PDF?
- What are the PDF.js keyboard shortcuts?
- The PDF.js files are too big. Is it possible to obtain minified versions of the JS files?
- Is there a pre-built version PDF.js available?
- What is the ECCN for PDF.js?
- PDF.js does not render my files right. Can I report an issue?
- I know that my PDFs are corrupted. Will PDF.js attempt to display it?
- I have a really great idea. Where is the best place to record it?
- I’m developing a custom solution based on PDF.js core library. Can you help me?
- I want to render all 100 pages in a document at a high resolution. Is it a good idea?
- There are two back-ends, canvas and SVG. Which one should I use?
- PDF.js is fetching the entire PDF file from a server. Can it fetch only the required portions for rendering?
- What is the latest stable version of PDF.js?
- What types of PDF files are slow in PDF.js? Can I optimize a PDF file to make PDF.js faster?
可以在默认阅读器中指定一个不同PDF文件吗?
可以修改 web/app_options.js
文件中的 defaultUrl
app 选项,或者在阅读器 URL 后添加 ?file=
查询字符串,例如:http://mozilla.github.com/pdf.js/web/viewer.html?file=compressed.tracemonkey-pldi-09.pdf
。在后面这种情况时,PDF 路径/URL 必须使用encodeURIComponent()
编码。
可以在不载入任何PDF文件时启动阅读器,此时需要将 defaultUrl
app 选项设为一个空字符串,或者使用 ?file=
查询字符串时不指定文件路径。后期可使用PDFViewerApplication.open(file)
来载入PDF文件。
可以使用原始二进制数据来打开PDF文件:在PDFViewerApplication.open
调用中使用 Uint8Array 替代 URL。如果是base64 编码数据,需要先进行解码(decode) ——并非所有浏览器都支持 atob
或数据 URI scheme。(base64 转换操作会消耗更多内存,所以我们建议先将原始PDF数据作为类型数组(typed array) 进行传递)。
可以从另一个服务器中载入 PDF 吗(跨域请求)?
默认是不行的,但是可以实现。PDF.js 运行时权限和其他 JavaScript 代码一样, 这意味着不能执行跨域请求(参考 Same origin policy 及an example)。有多种解决方法,比如使用 CORS (参考 unsafe headers issue 和Access-Control-Expose-Headers issue)或者在服务器上设置一个代理,用于给 PDF.js 提供 PDF 文件(示例: https://github.com/mozilla/pdf.js/issues/1000#issuecomment-133756244)。 请注意 generic/demo viewer 禁止了这项功能,如果不是布署在 mozilla.github.io 域以避免内容欺骗(content spoofing) (参考https://github.com/mozilla/pdf.js/pull/6916)。
支持什么浏览器?
从2.4.456版本起,我们默认为现代浏览器制作了一个 non-translated/non-polyfilled 构建。同时,我们也为旧浏览器提供了 translated/polyfilled 构建,使用的是一个单独的包(后缀为 -es5-dist.zip
)。
目标在于支持所有 HTML5 兼容的浏览器,但是由于浏览器/版本的不同,对PDF特性的支持也各不相同。一般地,支持情况如下。如果未指明具体版本,一般指的是最新的桌面/移动版本。
浏览器 | 支持 | Automated testing | 备注 |
---|---|---|---|
Firefox | Yes | Windows/Linux | |
Chrome | Yes | Windows/Linux | |
Opera | Yes | None | |
Edge (基于Chromium) | Yes | None | |
IE 11/Edge (基于非Chromium) | Mostly | None | 有些功能可能不可用,和现代浏览器相比性能上会更差。但是,在 2.6.347 稳定版本之后将不再支持。 |
Safari 10+ | Mostly | None | 出现过一些功能缺失,一般没有什么问题。移动设备只支持 iOS 10 及更高版本。 |
IE 10 and below | No | None | 很多功能都不支持。 |
哪些浏览器有插件(在哪里可以找到安装流程)?
Chromium 插件是由一位 PDF.js 贡献者维护的。如果要安装Chromium插件,可参考 README。
Firefox 35 及更高版本不再支持插件并将其标记为 disabled。PDF.js 是从 Firefox 19 后嵌入到浏览器的。通常是开发人员使用这个插件,想要将新版本的 PDF.js 库嵌入到旧版本的 Firefox 中。用户应该卸载插件,反转pdfjs.disabled
配置设置,并通过 Options -> Applications
将 PDF 文件应用程序选择为内部阅读器,以继续在Firefox中使用 PDF.js 查看PDF文件。
我会 JavaScript ,而且希望成为项目贡献者。我该怎么开始?
首先,你要准备好你的分支(fork)并配置好开发环境。别忘了阅读 Contributing 页。其次,你要熟悉PDF格式及PDF.js内部机理(PDF format and PDF.js internals)。再次,如果你没有一个确定的问题要修复,可以去 open issues labeled 5-good-beginner-bug 选择一个。 最后,提交一个 pull request 用于评审。在此过程中如果有问题或者想要找评审人员,建议在Matrix room联系 PDF.js 团队。
可以在PDF文件中添加注解(annotation)吗?
PDF.js 是用来阅读PDF文件的,而非编辑文件。所以我们并不支持添加任意形式的注解。但是,原文件中的注解是可以正常渲染出来的。
PDF.js 键盘快捷键都有哪些?
导航
Home、End、Page up、Page down 和所有方向键都可以用来在文件中进行导航。另外,还有下面这些导航快捷键:
- 下一页: n、j、空格(仅限演示模式)、Enter(仅限演示模式)、 左键单击(仅限演示模式)。
- 上一页: p、k、Shift + 空格(仅限演示模式)、Shift + Enter(仅限演示模式)、Shift + 左键单击(仅限演示模式)。
阅读器控件
可以使用用户界面按钮或者 ctrl + 鼠标滚轮来进行缩放,也可以使用键盘快捷键:
- 放大视图: ctrl + +, ctrl + =
- 缩小视图: ctrl + -
- 恢复正常视图: ctrl + 0
- 顺时针旋转文档: r
- 逆时针旋转文档: shift + r
- 激活演示模式: ctrl + alt + p (IE11中无效)
- 启用手形工具: h
- 启用文本选择工具: s
- 移动焦点至“跳转到页”框: ctrl + alt + g
- 在文档中查找文本: ctrl + f
- 查找下一处出现位置: ctrl + g
- 查找上一处出现位置: shift + ctrl + g
- 下载文档: ctrl + s
- 打印文档: ctrl + p
- 打开文件: ctrl + o
(有的配置上需要使用meta替换ctrl)
大纲侧边栏
- 使用 F4 切换侧边栏是否可见。
- 显示出侧边栏后,单击“显示文件大纲”按钮,可以显示出文件大纲。
- 嵌套的大纲项可以单击项左侧的三角符号进行收缩和展开。
- 如果要展开或收缩选中项下所有的项,可以在单击三角符号时按住Shift。
- 双击“显示文件大纲”按钮,可以展开或收缩所有大纲项。
PDF.js 文件太大了。是否可以获取到简化版本的JS文件?
可以使用以下命令构建简化版本的 PDF.js:
gulp minified
我们使用 Terser 来简化 JS 文件。现在知道如果使用了高级选项的话,其他简化器会破坏 PDF.js 的代码(见 #710 或#2479)。在使用Google Closure Compiler等简化器时,使用 whitespace/comments removal 模式比较保险。如果你不是使用gulp minified
,请注意必须配置简化器保留原有的 class/function 名称,否则构建出来后不一定能正常工作。
是否有 pre-built 版本的 PDF.js?
有。详情请参考 http://mozilla.github.io/pdf.js/getting_started/ 和 https://github.com/mozilla/pdf.js/wiki/Setup-PDF.js-in-a-website#official-releases 。通用 PDF.js 库构建版本可以从 https://github.com/mozilla/pdfjs-dist 获取到。这些构建版本可通过 NPM 安装npm install pdfjs-dist
,或者通过 Bower 安装bower install pdfjs-dist
。
未完,待续…