【发布时间】:2023-04-02 01:24:01
【问题描述】:
我在 SWFTools 和 XPDF 的帮助下将 pdf 提取到图像/swf 和文本中。我在 PDF 脚本中运行这些。
但现在我想更进一步,尝试从 PDF 中获取 TOC 是否可以提取此信息?
【问题讨论】:
-
如果您想使用 3rd 方应用程序执行此操作,那么我可以推荐 Debenu PDF Aerialist,它具有“目录”的导出功能。
我在 SWFTools 和 XPDF 的帮助下将 pdf 提取到图像/swf 和文本中。我在 PDF 脚本中运行这些。
但现在我想更进一步,尝试从 PDF 中获取 TOC 是否可以提取此信息?
【问题讨论】:
我认为查看PHP's PDFLib 将是一个很好的起点。如果向下滚动,您将看到大量用户发布的将 PDF 转换为 HTML 或 PDF 转换为文本的解决方案。转换后,一个相对简单的匹配函数可以提取标记的 TOC 项目并将它们放入一个数组中,然后您可以随意操作。
This StackOverflow post还有更多的解决方案。
希望这会有所帮助。
【讨论】:
我通过一些搜索找到了这个。看起来很有希望。
PDFMiner:http://www.unixuser.org/~euske/python/pdfminer/index.html
注意:该工具是基于 Python 的,但您应该能够通过 shell 访问来使用该工具。或者,您可以从源代码本身收集一些有用的信息,因为该项目是开源的。
来自网站:
dumppdf.py
dumppdf.py 以伪 XML 格式转储 PDF 文件的内部内容。该程序主要用于调试目的,但也可以提取一些有意义的内容(例如图像)。
示例:
$ dumppdf.py -a foo.pdf (dump all the headers and contents, except stream objects) $ dumppdf.py -T foo.pdf (dump the table of contents) $ dumppdf.py -r -i6 foo.pdf > pic.jpeg (extract a JPEG image)
【讨论】:
dumppdf -T file.pdf | grep \<outline 提供了一个很好读的目录。 (dumppdf -T file.pdf | grep -E '\<outline|pageno' 也给出了页码)
或者,您可以使用MuPDF,它是一个非常轻量级但完整的 PDF 实现,用 C 语言编写。在apps/ 子目录中,您会找到一些可以查看、转储和提取 PDF 文件信息的工具。我更喜欢 MuPDF 而不是 xpdf,因为它得到积极维护并且有更好的 PDF 支持。
否则,总是有 Poppler 实际上基于 xpdf。开发人员将其代码移植到 C++。因此,它的性能比其前身差。与 MuPDF 相比,Poppler 似乎功能稍多一些,但反过来代码要复杂得多。
不过,出于您的目的,MuPDF 应该就足够了。您可以根据apps/ 中提供的示例代码编写一个简单的应用程序,它可以提取您需要的所有信息,而无需依赖外部应用程序。
【讨论】:
我尝试了dump.pdf -T,但它不适用于某些 PDF 文件。
我刚刚找到了来自 MuPDF 的另一个名为 mutool 的工具。我不知道这是否比 dump.pdf 更好,但处理 PDF 文件 dump.pdf 会引发错误。
以下是使用 mutool 提取 TOC 的方法
mutool show {your-pdf-file} outline
【讨论】:
+ "The name of the section" #19,135,421