我最近在Python中编写了一个程序,允许我读取PDF,从用户那里获取一些命令,并以不同的顺序输出部分或全部原始PDF。您还可以选择您感兴趣的页面。当时,有一个很棒的库,PyPDF2。它做了所有繁重的工作。
现在,我正在使用另一种基本上没有PDF支持的语言(Haskell)。我正在考虑建立自己的个人图书馆。但是,在查看PDF文件的内容时,我发现很难确定特定页面的位置。我可以告诉文件中有多少页面,但是我无法查看文件的特定部分并说“这是Y的第X页”。那么,我如何根据页面分离内容?如果我不知道页面内容是什么,我怎么能根据页面拆分文件?
答案 0 :(得分:1)
您需要的第一件事是PDF规范的副本。您可以从Adobe网站免费下载: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf
在该文件中,请参阅第7.7.3节,其中解释了" Page Tree"作品。
基本上,PDF文件包含一棵树(Adobe建议它应该是一棵平衡的树,但你并没有义务保持这一点)从一个"页面"对象,可选地包含多个中间级对象,并以" Page"对象。例如:
Pages
. Pages
. Page (1)
. Page (2)
. Page (3)
. Pages
. Pages
. Page (4)
. Page (5)
. Pages
. Page (6)
. Page (7)
此树中的级别数量不受限制。要查找给定页面,您必须从头到尾遍历树,在找到页面时分配页码" Page"对象。我在上面的例子中指出了这些对象代表的页码(从页面索引1开始)。
获得页面对象后,您可以使用该页面对象(可能还有其父级)来查找该页面所需的资源。再看看PDF规范中的"资源"字典和关于继承的讨论。