【问题标题】:Reducing PDF loading times using pdf.js使用 pdf.js 减少 PDF 加载时间
【发布时间】:2013-03-28 22:57:52
【问题描述】:

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

谢谢!

【问题讨论】:

  • 你的 pdf 是线性化的吗?如果不是,any PDF 查看器必须在显示任何内容之前下载整个文件。如果是,您可以寻找其他查看插件。
  • 我不确定它们是否被线性化,我联系了从事 mozilla pdf.js 项目的开发人员,他们似乎会为此添加一些支持。
  • 您的答案中提到的对渐进式加载的支持可以减少加载时间。但是总有一些棘手的情况需要对 PDF 的 Missy 视而不见。

标签: pdf pdf.js


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 过度宣传特定产品/资源可能会被社区视为垃圾邮件。看看help center,特别是What kind of behavior is expected of users? 的最后一部分:避免公开的自我推销。您可能还对How to not be a spammerHow do I advertise on Stack Overflow? 感兴趣。
    • 道歉。不是我的本意。不久前在这里浏览了这些答案后,当我遇到同样的问题时,我意识到没有大量工作就没有这样的“解决方案”,所以我想我会把工作放进去然后分享它。如果它以这种方式出现,我不是打算发送垃圾邮件和道歉。有点兴奋,因为这是我发布的第一个开源项目,所以可能有点太兴奋了;)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-02
      • 2011-05-27
      • 2014-05-30
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2016-09-19
      • 2011-01-20
      相关资源
      最近更新 更多