如何获取PDF页面的字节范围?

时间:2014-12-17 18:53:48

标签: javascript html pdf viewer pdf.js

我正在尝试使用mozilla pdf.js项目加载PDF文档,虽然我已经掌握了如何将文档加载到Page&缩放级别(#page=10&zoom=page-fit),我检查了viewer的选项,发现我还可以通过URL参数向PDF文件添加范围请求...我不知道如何这个功能,所以我想我会问这里......

我有2个PDF文件,我的问题是,我可以为页面上每个按钮的PDF添加范围参数,以便在点击时仅加载所需的PDF页面吗?

我目前正在我的系统上使用XAMPP,我不确定XAMPP是否支持范围请求(测试),尽管该网站将在稍后上传。是否通常由webhosts支持范围请求?

如何分别获取2个PDF文件中所有页面的字节数范围?是否有PHP脚本或某些Windows实用程序来从PDF获取页面范围(以字节为单位)?

一旦找到,我怎样才能在加载PDF时将这些范围请求添加到viewer.html页面,这样就不会首先加载整个文档,只会首先加载所需的页面,然后再加载disableAutoFetch=false可以让观众获得剩余的PDF:

  

如果没有其他范围请求,则获取PDF的剩余内容   正在发送PDF文件

(在隐身搜索时在某些博客上阅读类似的内容,不记得该博客的网址,但pdf.js wiki在网站上没有提到这一点。)

编辑:我的PDF文件已根据pdfinfo utility进行了优化。

Pdf Optimized

1 个答案:

答案 0 :(得分:3)

请求字节范围的功能不适用于最终用户。这是正确处理'线性化' PDF(通常也称为'web optimized' PDF)的隐含要求。

此命令可以检查线性化/ Web优化的PDF,例如:

 pdfinfo filename.pdf | grep Optimized:

线性化PDF的内部结构确实有点不同。基本上,它们是为了使符合标准的阅读器软件不需要下载完整的文件,因此它可以访问trailerxref表格部分(标准PDF中的部分始终位于文件的末尾) )。

预告片和X /交叉引用表(这是一种内部PDF“ToC”)是必需的,因此读者软件能够识别文件中根对象的位置,并从那里,页面和所有其他对象。

相反,读者可以通过不同方式了解xref和根对象位置,并且可以开始渲染第一页(其对象需要位于文件的开头),而其余的文件/对象/页面仍在下载。

这意味着用户可以在第一页可见时立即点击书签,内部超链接或告诉读者“转到第80页”。然后,读者从已经处理的信息中知道它应该从符合要求的Web服务器请求哪个字节范围。

其他问题:

  • 不,在“标准”PDF中,与某个页面相关的对象几乎从不连续(这是一个非常罕见的例外)。

  • 是的,Web服务器也需要支持字节范围传递('byte serving')。是的,可以配置所有现代Web服务器以支持此功能。

  • 不,我不知道有任何实用程序向您报告来自PDF的页面范围(以字节为单位)(仅适用于线性化PDF,如果是这样的话)。

  

TL; DR: 如果您的PDF文档是“网络优化的”,则在PDF的上下文中请求字节范围下载是合理的第一个地方!(请求某个字节范围必须由查看器完成,将用户对某个页面的请求转换为正确的范围号...)


更新

资源: