从PDF文件中提取文本

7
我需要从PDF文件中提取文本。这些文本可能以表格格式出现,将用于外部方与我们的系统之间的自动数据传输。
有人可以建议一个命令行工具(例如pdf转txt)或库来完成这个任务吗?
语言选项:
- C#(首选) - Java(如果必须)
我在这里找到了一些想法,但我认为那个人更多地谈论了一次性的情况,而我则更多地讨论了每天的导入。

https://stackoverflow.com/questions/488089/extracting-tables-from-pdf-files


1
您是否想保留文本的表格格式?如果是,那么该任务将变得非常困难。如果不需要保留表格格式,那么任何建议的 PDF 转文本库都可以使用。 - Rowan
表格格式不重要,只需是机器可读的,以便我可以解析并将其推送到数据库中。 - Chris
7个回答

4

pdftotext 看起来可以很好地完成任务。

pdftotext file.pdf [textfile.txt]

编辑: 我不确定您想要如何保留有关表格的信息。最好的输出结果(至少对于我的人眼而言)是由以下方式产生的:

pdftotext -layout file.pdf [textfile.txt]

此选项尽可能保持文档的原始布局。特别是,在文本输出中表格仍然看起来很好。默认情况下,将表格的列解释为文本列(非常糟糕)。另一个选项是-raw,这个选项可能不如之前的好看,但仍然有用。


根据维基百科,xpdf确实有一个pdftotext的实现。我使用的是poppler-utils包中的版本。我似乎找不到一个带有表格的PDF文件来测试输出结果。您想要什么样的输出呢? - Anton Geraschenko
看起来poppler是xpdf的一个分支,所以它可能是同样的工具。 - Chris
我使用了这个xpdf版本,并且对结果非常满意。就像Anton在上面提到的那样,-layout标志确实非常有帮助。 - Tim Perry

4

使用itextsharp,以备后用。 - Chris

1

PDF中的表格数据通常很难正确提取,因为大多数PDF文件都不包含结构化内容元数据。没有这些元数据,PDF文件只是一堆文本和其他操作。大多数情况下,只有人类才能判断文档中是否有表格。

几乎任何足够先进的工具和库都会尝试使用启发式方法对从PDF中提取的文本进行结构化处理。当然,不同的工具和库的结果会有所不同。

您可以尝试使用Docotic.Pdf库(免责声明:我在Bit Miracle工作)来提取PDF文件中的文本。我认为该库应该能够以足够的质量提取文本以供进一步处理。

请查看一个示例,展示了如何从PDF中提取文本


1
我无法提供解决方案,但可以提供一些通用建议。我的建议是在记事本或其他纯文本编辑器中打开PDF文档并研究格式化代码。它们非常容易理解。例如,//par是一个段落,//tab是一个制表符。一旦您知道了表格布局的格式化代码,您将很容易想出自己的解决方案来从PDF文档中提取任何内容。

1
这并不容易。从文档中以人类可读的方式提取文本涉及大量工作。如果你只需要每次从同一份文档中提取文本,那么任务会变得更加容易一些,但是如果你需要从不同来源的随机文档中提取文本,那就一点也不容易了。因此,我不建议使用这个选项,除非你想花费相当多的时间来完善它,而且无法使用任何第三方库。 - Rowan

1

在Java上还有PdfBox和JPedal。PDF文件格式中不存在表格,因此任何软件都将对其进行“猜测”。


1

Apache Tika 是一款开源的 Java 工具包,专门用于提取各种文档(包括 PDF)中的结构化内容,正是您所需要的。

它确实使用了 PDFBox 来处理 PDF 文件格式,但提供了一定程度的抽象,非常适合提取结构化内容。

它还包含命令行实用程序 - 请参见此处


0

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