2

打开 PDF 时有没有办法减少 pdf.js ( http://mozilla.github.com/pdf.js/ ) 的加载时间?我正在处理大型 PDF 文件 (50MB+),而我的用户通常网络速度较慢。有时他们甚至需要 2 分钟以上才能到达第一页。这是 PDF 格式的限制吗?是不是为了解析 PDF 文件,您需要阅读整个文件?

谢谢!

4

3 回答 3

2

我联系了从事 mozilla pdf.js 项目的小组,看起来他们正在努力增加对此的支持。欲了解更多信息:https ://github.com/mozilla/pdf.js/pull/2719

于 2013-04-15T19:56:53.270 回答
1

当我正在编写一个允许客户上传自己的 PDF 然后显示它们的应用程序时,我已经对这个问题进行了很多研究。显然,这几乎不能控制 PDF 的大小或内容(有些比其他的更复杂)。

PDFJS 提供了两种渲染方式——画布和 svg,我尝试了这两种方法。Canvas 真的需要我专注于一次加载几页。如果我尝试除此之外的任何东西,我经常会在 iPad 应用程序上耗尽画布内存。无论您做什么,画布都会占用大量内存,而占用大量内存只会减慢一切,增加加载时间并减慢查看器中的交互。SVG 模式一开始效果更好,但由于需要创建的 SVG 元素的数量,它的滚动速度很慢,这意味着您经常会看到滚动的明显滞后。

根据 Thomas 的建议,我考虑将每个页面加载到画布中,将画布保存为 jpeg,然后显示 jpeg。这意味着我只需要一张画布。由于我的应用程序需要一种放大和缩小的方法,我还必须处理重新加载页面(只是在放大时,因为在缩小时使用高清 jpeg 并不是什么大问题)。它创建了一个不仅加载速度非常快的方法 - 每次都重复使用画布并且循环加载每个页面,而且它还可以非常快速地滚动和交互。挑战在于让注释(例如链接)发挥作用。

我所做的是将我所做的工作打包到一个开源包中,以便为其他人节省一份我希望的工作。它确实会加载所有页面,但一次加载一个,并为显示的每个页面创建一个 jpeg。通常它会计算出当前页面是什么,并在需要时从那里重新渲染。希望它对将来有这个问题的人有用。

https://www.npmjs.com/package/react-fast-scroll-pdf

于 2021-09-30T16:13:13.060 回答
0

在服务器端预渲染 PDF 页面并将它们作为静态图像提供,让您以加载单个图像的速度急切地拉入当前查看的页面。这可以在客户端加载 PDF.js javascript 之前和请求 PDF 之前完成。您可以在加载和处理 PDF 时将文本和更丰富的内容生成委托给 PDF.js。

您可能需要实现自己的 Web 查看器,PDF.js 在此处提供示例:https ://mozilla.github.io/pdf.js/examples/

于 2020-05-01T20:01:23.207 回答