【发布时间】:2011-08-22 04:36:44
【问题描述】:
我发现很多帖子都提出了阅读 PDF 的解决方案。我想逐字阅读PDF文件并对其进行一些处理。人们建议使用 pdfMiner 将整个 PDF 文件转换为文本文件。但我想要的是逐字阅读PDF。谁能推荐一个这样做的图书馆?
【问题讨论】:
我发现很多帖子都提出了阅读 PDF 的解决方案。我想逐字阅读PDF文件并对其进行一些处理。人们建议使用 pdfMiner 将整个 PDF 文件转换为文本文件。但我想要的是逐字阅读PDF。谁能推荐一个这样做的图书馆?
【问题讨论】:
可能最快的方法是首先使用 pdftotext 将您的 pdf 转换为文本文件(在 pdfMiner 的网站上,有一个声明说 pdfMiner 比 pdftotext 慢 20 倍),然后像往常一样解析文本文件。
另外,当您说“我想逐字读取 pdf 文件并对其进行一些处理”时,您没有指定是否要根据 pdf 文件中的单词进行处理,或者您实际上是想修改pdf文件本身。如果是第二种情况,那么你手上的问题就完全不同了。
【讨论】:
我正在使用 pdfminer,它是一个出色的库,特别是如果您习惯使用 python 编程的话。它读取 PDF 并提取每个字符,并将其边界框作为元组 (x0,y0,x1,y1) 提供。 Pdfminer 将提取矩形、线条和一些图像,并尝试检测单词。它有一个令人不快的 O(N^3) 例程来分析边界框以合并它们,因此在某些文件上它可能会变得非常慢。尝试转换您的典型文件 - 可能对您来说很快,或者可能需要 1 小时,具体取决于文件。
您可以轻松地将 pdf 作为文本转储,这是您应该为您的应用程序尝试的第一件事。您也可以转储 XML(见下文),但不能修改 PDF。 XML 是您可以从中获得的最完整的 PDF 表示形式。
您必须通读示例才能在您的 python 代码中使用它,它没有太多文档。
PdfMiner 附带的将 PDF 转换为 xml 的示例展示了如何在代码中使用 lib。它还向您展示了以人类可读(就 xml 而言)形式提取的内容。
您可以使用参数调用它,告诉它“分析”pdf。如果你这样做,它会将字母合并成文本块(单词和句子;句子会有空格,因此很容易在 python 中标记为单词)。
【讨论】:
虽然我真的很喜欢 pdfminer 的答案,但我想说的是,随着时间的推移,软件包并不相同。当前的 pdfminer 仍然不支持 Python3,可能需要更新。 因此,要更新主题 - 即使答案已经投票 - 我建议从网站转到 pdfrw:
- 0.3 版经过测试,可在 Python 2.6、2.7、3.3、3.4 和 3.5 上运行 操作包括子集、合并、旋转、修改元数据等
- 目前最快的纯 Python PDF 解析器已被打印机用于印前生产多年
- 可与 rst2pdf 配合使用,忠实再现矢量图像
- 可以单独使用,也可以与 reportlab 结合使用,以在新的 PDF 中重复使用现有的 PDF
- 许可许可
【讨论】: