【问题标题】:Extracting text from a PDF file [closed]从 PDF 文件中提取文本 [关闭]
【发布时间】:2009-08-14 04:24:23
【问题描述】:

我需要从 PDF 文件中提取文本。此文本可能采用表格格式,用于在外部方和我们的系统之间自动传输数据。

任何人都可以推荐一个命令行工具(例如 pdf 到 txt)或对此有用的库吗?

语言选项:

  • C#(首选)
  • Java(如果必须的话)

我在这里找到了一些想法,但我认为这家伙说的更多是一次性的情况,我说的更像是日常导入:

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

【问题讨论】:

  • 是否要保留文本的表格格式?如果是这样,任务将变得更加困难,如果不是,那么任何建议的 PDF 到文本库都应该这样做。
  • 表格格式并不重要,它只需要机器可读,这样我就可以解析它并将其推入数据库。

标签: c# java pdf


【解决方案1】:

【讨论】:

  • 那个用的是itextsharp,以后参考
【解决方案2】:

pdftotext 似乎做得很好。

pdftotext file.pdf [textfile.txt]

编辑:我不确定您希望如何保留有关表格的信息。最好看的输出(至少在我看来)是由

pdftotext -layout file.pdf [textfile.txt]

这会尽可能地保持文档的原始布局。特别是,表格在文本输出中看起来仍然相当不错。默认是将表格的列解释为文本列(很糟糕)。 -raw 选项是另一个对我来说看起来不太好但可能仍然有用的选项。

【讨论】:

  • 根据*,xpdf 确实有一个pdftotext 的实现。我在poppler-utils 包中的那个。我似乎找不到包含表格的 pdf 来测试输出的样子。你想要什么样的输出?
  • 看起来 poppler 是 xpdf 的一个分支,所以它可能是同一个工具。
  • 我使用了 xpdf 版本,对结果非常满意。 -layout 标志 真的 有帮助,正如 Anton 上面所说的那样。
【解决方案3】:

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

【讨论】:

  • 没那么容易。以人类可读格式从文档中提取文本涉及大量工作。如果您只需要每次都从同一个文档中提取文本,这项任务会变得更加容易,但是如果您需要从随机文档中提取文本,来自不同的来源,这并不容易。所以我不会推荐这个选项,除非你想花很多时间来完善它并且真的不能使用任何第三方库。
【解决方案4】:

Java 上还有 PdfBox 和 JPedal。 PDF 文件格式中不存在表格,因此任何软件都会“猜测”它们。

【讨论】:

    【解决方案5】:

    Apache Tika 是开源 Java 工具包,专门用于您正在寻找的内容:从包括 pdf 在内的各种文档中提取结构化上下文。

    它确实将 PDFBox 用于 pdf 文件格式,但提供了非常适合提取结构化上下文的抽象级别。

    它包含命令行实用程序 - 请参阅 here

    【讨论】:

      【解决方案6】:

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

      几乎所有足够先进的工具和库都尝试使用启发式方法以某种方式构造从 PDF 中提取的文本。结果当然因工具和库而异。

      您可以尝试Docotic.Pdf library(免责声明:我为 Bit Miracle 工作)从 PDF 文件中提取文本。我认为图书馆应该提取质量足以进一步处理的文本。

      请查看显示how to extract text from PDF 的示例。

      【讨论】:

        【解决方案7】:

        尝试开源 java pdf 库

        http://www.lowagie.com/iText/docs.html

        【讨论】: