【问题标题】:Create outlines/TOC for existing PDF in Python在 Python 中为现有 PDF 创建大纲/TOC
【发布时间】:2020-03-11 16:04:05
【问题描述】:

我正在使用 pyPdf 将多个 PDF 文件合并为一个。这很好用,但我还需要在生成的 PDF 文件中添加目录/大纲/书签。

pyPdf 似乎只支持大纲的读取。 Reportlab 允许我创建它们,但开源版本不支持加载 PDF 文件,因此无法向现有文件添加大纲。

有什么方法可以使用 Python 或任何允许这样做的库向现有 PDF 添加大纲?

【问题讨论】:

  • 在我的脑海中,我认为至少有非 Python 解决方案可以解决这个问题,这样您就可以创建 PDF,然后运行带有一些选项的命令来指定大纲所需的内容.不是很好,但它至少应该能让你完成工作。
  • 这可能对您有用,也可能不适用,但请尝试link pdfrecycle 声称支持索引和书签生成。

标签: python pdf reportlab pypdf


【解决方案1】:

https://github.com/yutayamamoto/pdfoutline 我制作了一个 python 库,只是为了给现有的 PDF 文件添加大纲。

【讨论】:

    【解决方案2】:

    看起来 PyPDF2 可以完成这项工作。请参阅文档中的addBookmark 方法:https://pythonhosted.org/PyPDF2/PdfFileMerger.html

    【讨论】:

      【解决方案3】:

      我们在WeasyPrint 中遇到了类似的问题:cairo 生成 PDF 文件但不支持书签/大纲或超链接。最后我们硬着头皮读了PDF spec,自己动手了。

      WeasyPrint 的 pdf.py 有一个简单的 PDF 解析器和编写器,可以向现有文档添加/覆盖 PDF“对象”。它使用 PDF 的“更新”机制,只在文件末尾追加。

      此模块仅供内部使用,但我愿意对其进行重构,使其更易于在其他项目中使用。

      但是,解析器采用了一些快捷方式,无法解析所有有效的 PDF 文件。如果 PyPDF 的输出不如 cairo 的好,则可能需要对其进行调整。来自模块的文档字符串:

      我们没有尝试解析任何有效的 PDF,而是做出了一些假设 为 cairo 保留以简化代码:

      • 所有换行符都是 '\n',而不是 '\r' 或 '\r\n'
      • 除了数字 0(它始终是免费的)之外,没有“免费”对象。
      • 大多数空白分隔符由单个 0x20 空格组成。
      • 间接字典对象在行首不包含“>>”,除了标记对象的结尾,后跟“endobj”。 (在 换句话说,子词典的“>>”标记是缩进的。)
      • 页面树是扁平的:根页面节点的所有孩子都是页面对象,而不是页面树节点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        • 1970-01-01
        • 2018-11-22
        • 2014-02-28
        相关资源
        最近更新 更多