Javascript 在使用pdfviewer.js滚动时,巨大的PDF需要时间渲染

Javascript 在使用pdfviewer.js滚动时,巨大的PDF需要时间渲染,javascript,pdf,pdf-viewer,pdfjs,Javascript,Pdf,Pdf Viewer,Pdfjs,我有自定义的pdf查看器html页面用于呈现pdf。我正在使用pdfjs库渲染pdf。这对我来说很好 当我打开小pdf文件时,它会快速下载并渲染文件, 当我打开大pdf文件时,它会快速下载pdf文件,但渲染pdf文件需要太多时间 我可以看到大的pdf文件内容,但当我向下滚动时,它会挂起整个浏览器 有什么建议吗?这似乎是您在使用较旧版本的PDF.js,请尝试使用较新版本的PDF.js,总结您的OP-由于您没有回答问题或提供您遇到问题的PDF示例,因此没有人能给出结论性答案。这是一个遗憾,因为建立一

我有自定义的pdf查看器html页面用于呈现pdf。我正在使用pdfjs库渲染pdf。这对我来说很好

当我打开小pdf文件时,它会快速下载并渲染文件, 当我打开大pdf文件时,它会快速下载pdf文件,但渲染pdf文件需要太多时间

我可以看到大的pdf文件内容,但当我向下滚动时,它会挂起整个浏览器


有什么建议吗?

这似乎是您在使用较旧版本的PDF.js,请尝试使用较新版本的PDF.js,总结您的OP-由于您没有回答问题或提供您遇到问题的PDF示例,因此没有人能给出结论性答案。这是一个遗憾,因为建立一个片段来探究这个问题本来是很容易的

我猜,您的PDF文件的内容与pdfjs的功能可能不匹配。如果我们有您的示例文件,我们可能会在上引发一个bug,该bug似乎是活动的,并且得到了很好的支持

下面是对创建PDF渲染引擎所涉及问题的高级描述,旨在说明为什么您可能希望坚持使用流行浏览器中提供的主流内置渲染引擎

呈现PDF是一项复杂的任务。如果您将其分解为组件操作,这是可行的,但PDF标准的几个级别引入了大量选项。很可能是您的PDF包含pdfjs中存在错误的呈现实现的内容,或者是pdfjs尝试呈现时遇到的问题

一些背景:PDF格式既辉煌又邪恶。由于其便携性而辉煌,但由于其内部结构和存储机制而邪恶。没有像HTML那样友好的“DOM”。如果我们重新开始开发一种可移植的文档格式,我们不会选择PDF格式。但PDF目前有太多的动力,不能被扔掉

要将PDF文件的内容“呈现”到显示设备或打印机,您的代码需要解压缩PDF并将组件(图像、格式化文本、页面)呈现到显示设备。对于任何有HTML DOM操作经验的人来说,这听起来都很简单,但没有直接的比较

PDF是一种定义语言。大多数人最有可能体验到的等价物是SVG

任何在PDF文件中不是嵌入图像的内容都是基于矢量的输出,除了经过zip压缩并按x/y坐标而不是连续字符串排列的文本

绘图和布局说明位于通过树之类的指针链接的部分(摘要)-没有简单的自顶向下读取和渲染过程。PDF可以有多余的部分,替换为以后编辑的部分,但仍然存在。在主题方面,除非将PDF文件配置为快速web查看,否则渲染引擎必须等待整个文件交付后才能理解如何显示它。Fast web view将“索引”和第1页部分放在文件流的顶部,以允许渲染引擎尽可能快地将某些内容显示在屏幕上

要充分支持PDF,您必须能够呈现PDF中包含的任何内容,并按照PDF标准完美地执行此操作,否则您可能会发现PDF查看器崩溃或无法呈现整个PDF。您必须满足各种Acrobat标准级别,以及编辑包(Word、Illustrator、InDesign)供应商在PDF文件中插入的快捷方式和膨胀;图层、缩略图等

在PDF中,文本可以存储为矢量绘图指令或字体文件中字符的引用(如HTML文本)

关于颜色,请阅读PDF规范,您将看到原始PDF制作人可以决定使用一系列颜色空间选项。其中一些用于使用异种颜色机制的打印设备。您必须将其解释为屏幕上合理的设备颜色

然后是字体。字体可能是嵌入的子集,也可能不是。如果在渲染引擎运行时PDF中提到的字体不存在,则必须决定使用何种替代字体。为了保持PDF的逼真度,您需要以PDF中定义的比例在绘图表面上将图示符实现为矢量图形

鉴于PDF中的分层、缩放和旋转功能,您可能会将html画布视为绘图表面。任何知道的人都会告诉你,在canvas的世界里,渲染功能几乎是你自己的事情——canvas的优点和缺点都是如此,不过对于渲染PDF,你可能需要绝对控制,所以大多数库对你来说都没有用。这意味着您使用的是需要时间且易受bug影响的绘图原语

也许你最大的挑战是理解你必须做的事情的全部范围。这不是不可能,而是很难

总结一下,关于编写PDF呈现引擎的挑战,完美呈现PDF文件是一项非常复杂的任务。若在早期发布阶段,这些产品在不支持大量PDF规范方面被认为是非常有缺陷的,那个就不足为奇了。不要对开发者太苛刻——他们的目标很难实现。如果开发人员有支持,因此有时间继续项目,那么PDF规范中的全套功能可能会在某个时间点包含在他们的产品中。理想情况下,他们会发布一个不受支持的PDF功能列表,以便用户能够识别潜在的问题,尽管在PDF文件出现之前,您永远不会真正知道存在问题