java - 提取目录条目及其链接到的页码

标签 java python pdf itext pypdf

我有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,...?

最佳答案

我检查了你的文件,它看起来很奇怪。

请参阅以下屏幕截图:

enter image description here

我用了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/

相关文章:

javascript - 用jsp更新数据库

java - 比较两个字符串并将索引存储在整数数组中

java - 我应该如何使用servlet在两个jsp之间发送数据

python - 使用 Python 替换或交换文件中的子字符串

python - 字典循环

java - 将包含图表的 docx 转换为 PDF

java - 在 Java WebBrowser 控件中显示 PDF 时如何隐藏 Adob​​e Reader 工具栏?

ios - 将 UIWebView 转换为 PDF/Image 仅提供一英寸宽的输出

java - 如何从 Java 读取 OSX .plist 文件?

python - Dict 会以相同的顺序返回键和值吗?