【问题标题】:Extract entries of table of content and the page numbers they link to提取目录条目及其链接的页码
【发布时间】:2015-04-08 23:20:28
【问题描述】:

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

【问题讨论】:

    标签: java python pdf itext pypdf


    【解决方案1】:

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

    请看以下截图:

    我使用iText RUPS 来查看页面树的根。您可能知道 PDF 中的页面不知道其页码。页面的页码由页面在页面树中的位置决定。

    在屏幕截图中,您可以看到第 1 页的部分页面字典(对象 3)(它是第 1 页,因为3 0 R 是/Kids 数组中的第一个元素)。

    我打开了带有注释的数组,我看到一个带有/GoTo 动作的链接注释。此操作告诉 PDF 查看器跳转到页面字典为对象编号 58 的页面。

    当我们检查页面树(实际上只不过是一个没有任何叶子的分支)时,我们看到 58 0 R 指的是第 2 页(页面树中的第二项)。

    但是,这不可能是对的,不是吗?第 2 页只包含 TOC 的另一部分,所以我认为链接不正确。

    看起来好像您基于网页创建了 PDF,因为我看到一个引用 HTML 页面的 /PA 条目。

    长话短说:

    您需要遍历每个页面中的所有注释并查找/Link 注释。然后,您必须检查操作的值 (/A)。这将为您提供您正在寻找的页面的对象 ID。

    至于文本:显然,文本并没有存储在注解中。对于屏幕截图中显示的链接,您必须搜索矩形 [107.2 754.3 235.6 763.6] 内的文本。这并非不可能,但并不总是微不足道的。

    您的问题是一个需要几天工作的项目。如果您想要一个可行的示例,请考虑到您要求人们贡献的时间不只是几个小时。

    【讨论】:

    • 谢谢。我修改了链接到哪些页面,因为我害怕上传整个文件。我希望但不知道如何从 iText 开始,我认为这将是一个简单的程序来提取目录条目和它们链接到的页面。如果为此编写程序需要很多时间,那么知道我需要学习哪些类和函数(可能还有一个骨架程序)就足够了。
    • 内容存储在内容流中。链接存储在注释中。内容和链接之间没有直接的联系。唯一的对应是可点击区域(链接)和文本出现在同一位置。如果您想知道从哪里开始,请下载 The Best iText Questions on StackOverflow 并使用 Ctrl+F 获取包含 ANNOTS、Link、extract、...的答案。
    • 谢谢。顺便说一句,原始的pdf文件是由其他人从chm文件创建的。使用的转换程序没有将书签从 chm 提取到 pdf 文件。这就是我的帖子的来源。你知道哪些程序可以做到这一点,或者 iText 中的编程是否可以做到这一点?
    • 我可以改写你的问题吗? 您有 chm 文件,并且您正在寻找一种工具将这些文件转换为 PDF,以便保留链接。 如果这是问题,那么答案是:iText 不能这样做而且我不知道有任何其他工具可以做到这一点。
    • 最好不要。那是一个不同的问题。我的帖子是关于解析现有的 pdf 文件
    猜你喜欢
    • 2021-09-25
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2023-04-06
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多