提取PDF文件的目录?

32

我正在使用SWFTools和XPDF将PDF转换成图片、swf和文本,这些操作都是在一个PDF脚本中完成的。

但现在我想更进一步,尝试从PDF中获取目录(TOC),请问有没有可能提取这个信息?

4个回答

15
我尝试了dump.pdf -T,但是在一些PDF文件上无法使用。
还有另一个来自MuPDF的工具叫做mutool,我刚刚发现。我不知道这是否比dump.pdf更好,但它可以处理dump.pdf报错的PDF文件。
以下是如何使用mutool提取TOC: mutool show {your-pdf-file} outline MuPDF

这是一个很棒的方法(比dumppdf更易于可视化),它还会在末尾显示页面编号,以及X和Y坐标中的锚点位置(格式为“#PAGE,X,Y”,其中X和Y是距离左上角的距离,以UserUnit为单位,默认情况下等于1/72英寸= 2.54 / 72厘米,但可以更改)。例如,对于第19页的某些内容:+ "The name of the section" #19,135,421 - tobiasBora

14

我通过一些搜索找到了这个,看起来很有前途。

PDFMiner: http://www.unixuser.org/~euske/python/pdfminer/index.html

注意:该工具基于Python,但您应该能够通过shell访问使用该工具。或者,由于该项目是开源的,您也可以从源代码本身中获取一些有用的信息。

网站上的信息:

dumppdf.py

dumppdf.py dumps the internal contents of a PDF file in pseudo-XML format. This program is primarily for debugging purposes, but it's also possible to extract some meaningful contents (such as images).

Examples:

$ 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)

经过进一步的调查,我发现这个工具对我来说非常有用!+1 给 Yusuke Shinyama 和 PDFMiner 团队的其他成员! - Brian Lacy
谢谢,我会看一下。但是它是否也会在XML内生成目录表呢?因为现在我正在使用XPDF和PDF2SWF来获取内容 :)但是没有目录选项。 - Chris
我猜我不确定你在问什么。第二个“示例”行声称将特定地将TOC转储到XML文件中,您可以以适合自己的任何方式解析它。我自己没有使用过这个工具,但它听起来像是可以实现您想要做的事情。 - Brian Lacy
啊,谢谢,抱歉我错过了^^ 我会尝试一下那个或者mupdf。 - Chris
2
dumppdf -T file.pdf | grep \<outline 可以生成一个漂亮易读的目录表格。(dumppdf -T file.pdf | grep -E '\<outline|pageno' 还可以同时列出页码) - Frédéric Grosshans
这个解决方案总是抛出PDFNoOutlines异常。这个异常一直在威胁着。有没有解决办法?我尝试了多个PDF文件,但错误仍然存在。 - Tanmay Bairagi

3

或者,您可以使用MuPDF,它是一个相当轻量级但完整的用C编写的PDF实现。在apps/子目录中,您将找到一些工具,可以查看、转储和提取PDF文件中的信息。我更喜欢MuPDF而不是xpdf,因为它得到了积极的维护,并且具有更好的PDF支持。

否则,总是可以使用Poppler,它实际上是基于xpdf的。开发人员将其代码移植到了C++。因此,它的性能比前任差。与MuPDF相比,Poppler似乎具有稍微更多的功能,但代价是代码更加复杂。

对于您的目的,MuPDF应该足够了。您可以从apps/中提供的示例代码中组合一个简单的应用程序,该应用程序可以提取您需要的所有信息,而无需依赖外部应用程序。


0

我认为首先看看PHP的PDFLib会是一个很好的起点。如果你往下滚动,你会看到很多用户发布的解决方案,用于将PDF转换为HTML或文本。转换后,一个相对简单的匹配函数可以提取标记的目录项目并将它们放入一个数组中,然后您可以随意操作该数组。

这个StackOverflow帖子也有一些更多的解决方案。

希望能够帮助到你。


我已经在使用XPDF pdf2txt了...但是你怎么匹配呢?目录通常是手工创建的...信息需要在pdf中的某个地方...(因为它们可以有侧面板) - Chris
只有当人们没有必要的专业工具自动创建目录时,才应该手动创建目录。如果自动完成,则目录中的项目将被标记为书签(我认为这就是您所说的“侧边栏”),并链接到它们的页面,因此更容易匹配。如果手动完成,则它们与PDF中任何其他文本块没有区别,脚本成功匹配它们几乎是不可能的。 - Valentin Flachsel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接