我有a PDF file ,其中包含一个目录,其中每个条目都链接到文件中的一个页面。
我该如何用Python或Java(或其他一些语言)编程来提取以下形式的目录:
entry1 PageNumberEntry1LinkedTo
entry2 PageNumberEntry2LinkedTo
...
例如
Section 2.6. Argument Arrays 2
Section 2.7. Thread-Safe Functions 2
(如果能按照目录结构提取到某种树形数据结构中那就更好了,如果不可能的话可以跳过。)
我想获得一些关于可以使用哪些 Python 或 Java 模块和函数来完成此任务的帮助?例如Python中的PDFMiner或pypdf2,IPython或Java中的iText,...?
最佳答案
我检查了你的文件,它看起来很奇怪。
请参阅以下屏幕截图:
我用了iText RUPS查看页面树的根。您可能知道 PDF 中的页面不知道其页码。页面的页码由页面在页面树中的位置决定。
在屏幕截图中,您可以看到第 1 页的页面字典(对象 3)的一部分(它是第 1 页,因为 3 0 R
是 /Kids
数组中的第一个元素)。
我已经打开带有注释的数组,我看到一个带有 /GoTo
的链接注释行动。此操作告诉 PDF 查看器跳转到页面字典为对象号 58 的页面。
当我们检查页面树(实际上只不过是没有任何叶子的单个分支)时,我们看到 58 0 R
指页面 2(页面树中的第二项)。
但是,这不可能是正确的,不是吗?第 2 页仅包含目录的另一部分,因此我认为这些链接不正确。
看起来好像您是基于网页创建的 PDF,因为我看到 /PA
引用 HTML 页面的条目。
长话短说:
您需要循环遍历每个页面中的所有注释并查找 /Link
注释。然后,您必须检查操作的值 ( /A
)。这将为您提供您正在查找的页面的对象 ID。
至于文本:显然,文本不存储在注释中。对于屏幕截图中显示的链接,您必须搜索矩形内的文本 [107.2 754.3 235.6 763.6]
。这并非不可能,但并不总是微不足道的。
您的问题是一个需要几天工作的项目。如果您想要一个可行的示例,请考虑到您要求人们贡献的不仅仅是几个小时的时间。
关于java - 提取目录条目及其链接到的页码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29527017/