我正在尝试使用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进行了优化。
答案 0 :(得分:3)
请求字节范围的功能不适用于最终用户。这是正确处理'线性化' PDF(通常也称为'web optimized' PDF)的隐含要求。
此命令可以检查线性化/ Web优化的PDF,例如:
pdfinfo filename.pdf | grep Optimized:
线性化PDF的内部结构确实有点不同。基本上,它们是为了使符合标准的阅读器软件不需要下载完整的文件,因此它可以访问trailer
和xref
表格部分(标准PDF中的部分始终位于文件的末尾) )。
预告片和X /交叉引用表(这是一种内部PDF“ToC”)是必需的,因此读者软件能够识别文件中根对象的位置,并从那里,页面和所有其他对象。
相反,读者可以通过不同方式了解xref
和根对象位置,并且可以开始渲染第一页(其对象需要位于文件的开头),而其余的文件/对象/页面仍在下载。
这意味着用户可以在第一页可见时立即点击书签,内部超链接或告诉读者“转到第80页”。然后,读者从已经处理的信息中知道它应该从符合要求的Web服务器请求哪个字节范围。
其他问题:
不,在“标准”PDF中,与某个页面相关的对象几乎从不连续(这是一个非常罕见的例外)。
是的,Web服务器也需要支持字节范围传递('byte serving')。是的,可以配置所有现代Web服务器以支持此功能。
不,我不知道有任何实用程序向您报告来自PDF的页面范围(以字节为单位)(仅适用于线性化PDF,如果是这样的话)。
TL; DR: 如果您的PDF文档是“网络优化的”,则在PDF的上下文中请求字节范围下载是合理的第一个地方!(请求某个字节范围必须由查看器完成,将用户对某个页面的请求转换为正确的范围号...)
资源: