【问题标题】:How to integrate Chromes built in PDF viewer into a webapp如何将内置 PDF 查看器的 Chrome 集成到 Web 应用程序中
【发布时间】:2015-12-02 14:05:50
【问题描述】:
当点击网页应用程序中的 PDF 链接时,用户应该被带到 PDF 查看器页面
- 可以提出打印请求
- 用户应该无法下载文档
我应该为此使用浏览器内置的 PDF 查看器吗?
pdf.js 相对于浏览器内置的 PDF 查看器有哪些优势?
更重要的是,是否建议将我的 webapp 与 Chrome 内置 PDF 查看器集成,以及如何满足以上 2 个条件?
【问题讨论】:
标签:
javascript
google-chrome
pdf
pdf.js
【解决方案1】:
关于在 pdf 查看器中使用 pdf.js 的好处的问题:
- 在浏览器中渲染 PDF 的传统方法是使用本机代码插件,可以是 Adobe 自己的 PDF 阅读器或其他商业渲染器,或者一些开源替代品(例如 poppler)。 从安全角度来看,这扩大了受信任的代码库,因此 Google 的 Chrome 浏览器在对 PDF 渲染器进行沙箱处理以避免代码注入攻击时遇到了相当大的麻烦。基于 HTML5 的 pdf.js 实现完全不受此类问题的影响。
- PDF.js 比任何类型的插件都具有速度优势,因为它会立即开始渲染,使用内置插件,您必须等待插件加载。此外,如果该插件已被用户禁用,那么您的 pdf 将不会被打开。但是在使用 pdf.js 时永远不会出现这个问题。
- 上图一目了然地为我们提供了几乎所有有趣的结果。您会看到处理 PDF 中所有页面所花费的时间与处理 Tracemonkey Paper(打开 PDF.js 时看到的默认 PDF)平均页面所花费的平均时间相关的直方图。
PDF.js 适用于几乎所有知名的网络和智能手机浏览器。 Here 是当前支持的浏览器列表。因此,与您现在尝试做的事情(即尝试仅针对 chrome)相比,使用 pdf.js 将扩大您的用户范围以及他们可以用于您的产品的浏览器。
打印功能已经存在于 pdf.js 中,因此已经解决了您的第一个需求。
至于您的第二个需要是防止下载 pdf。 Here(ztraboo 链接中的最后一条评论)您可以在其中找到要注释掉的行和从pdf.js源代码中删除哪些下载代码,以便删除下载按钮和方便的代码。
最后一个快速入门的 pdf.js 教程是here。只需使用您的实际服务器而不是那里的本地主机。
【解决方案2】:
PDF.js 是客户端 javascript 脚本,与原生插件相比具有以下优势:
- 它不需要执行本机代码,与作为本机应用程序运行的插件相比,使用 PDF.js 更安全(理论上),因此安全性较低;
- 使用 pdf.js,即使用户关闭了 Chrome 中的所有原生插件(例如出于安全原因),您也可以显示 PDF 文件;
- Web 开发人员可以立即提供更新的 pdf.js,而不是要求用户为浏览器下载和安装更新的插件;
- 使用 PDF.js,您可以从您的 javascript 代码中访问呈现的 PDF 元素,但使用插件,您实际上是在运行另一个应用程序(PDF 查看器插件),您对其属性、方法和 UI 的访问受到限制;
所以说到您的问题,您最好使用 PDF.js,这样您就可以实现与您的代码和查看器的深度集成。但是使用 pdf 插件,除了它提供的有限 API 之外,您无法访问它的元素、UI 等。