176

任何人都可以推荐一个库/API 来从 PDF 中提取文本和图像吗?我们需要能够获取文档预先知道的区域中包含的文本,因此 API 需要为我们提供页面上每个元素的位置信息。

我们希望以xmljson格式输出该数据。我们目前正在研究PdfTextStream,它看起来不错,但想听听其他人的经验和建议。

是否有替代方案(商业或免费)以编程方式从 pdf 中提取文本?

4

15 回答 15

137

我收到了一个 400 页的 pdf 文件,其中包含我必须导入的数据表 - 幸运的是没有图像。Ghostscript为我工作:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

输出文件被分成带有标题等的页面,但随后很容易编写一个应用程序来去除空白行等,并吸收所有 30,000 条记录。在这种情况下没有任何区别-dSIMPLE-dCOMPLEX

于 2014-10-16T13:06:11.587 回答
39

一个高效的命令行工具,开源,免费,在 linux 和 windows 上都可以使用:简单命名为 pdftotext。该工具是 xpdf 库的一部分。

http://en.wikipedia.org/wiki/Pdftotext

于 2014-08-13T20:47:25.477 回答
31

从今天开始我就知道:从 PDF 中提取文本的最佳方法TET,文本提取工具包。TET 是 PDFlib.com 产品系列的一部分。

PDFlib.com 是 Thomas Merz 的公司。如果您不认识他的名字:Thomas Merz 是“PostScript and PDF Bible”的作者。

TET 的第一个化身是图书馆。它可能可以做 Budda006 想要的所有事情,包括页面上每个元素的位置信息。哦,它还可以提取图像。它将碎片化为碎片的图像重新组合。

pdflib.com 还提供了该技术的另一个化身,即Acrobat 的 TET 插件。第三个化身是PDFlib TET iFilter。这是用于用户桌面的独立工具。两者都是免费的(如啤酒),可用于私人、非商业目的。

而且它真的很强大。比 Adob​​e 自己的文本提取要好得多。它为我提取了其他工具(包括 Adob​​e 的)只吐出垃圾的文本。

我刚刚测试了桌面独立工具,他们在网页上说的是真的。它有一个非常好的命令行。我对该工具处理的一些“有问题的”PDF 测试文件非常满意。

从现在开始,这个东西将成为我对每一个复杂和具有挑战性的 PDF 文本提取要求的推荐。

TET 简直太棒了。它检测表。在表格内部,它标识跨越多列的单元格。它分别标识每个表格单元格的表格行和内容。它很好地处理连字符:它删除连字符并恢复完整的单词。它支持非 ASCII 语言(包括 CJK、阿拉伯语和希伯来语)。当遇到连字时,它会恢复原来的字符...

试试看。

于 2010-09-15T23:25:40.527 回答
22

For python, there is PDFMiner and pyPDF2. For more information on these, see Python module for converting PDF to text.

于 2013-03-09T17:34:45.983 回答
13

这是我的建议。如果您想从 PDF 中提取文本,您可以将 pdf 文件导入 Google Docs,然后将其导出为更友好的格式,例如 .html、.odf、.rtf、.txt 等。所有这些都使用 Drive API . 它是免费的*且功能强大。看一眼:

https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get

因为它是一个 REST API,所以它兼容所有编程语言。我在上面发布的链接有许多语言的工作示例,包括:Java、.NET、Python、PHP、Ruby 等。

我希望它有所帮助。

于 2013-12-10T17:02:42.067 回答
10

PdfTextStream(你说你一直在看)现在对单线程应用程序是免费的。在我看来,它的质量比其他库要好得多(尤其是对于时髦的嵌入式字体等)。

它在 Java 和 C# 中可用。

或者,您应该看看开源的Apache PDFBox

于 2012-09-16T20:22:47.690 回答
7

这里的评论之一在 Windows 上使用了 gs。我在 Linux/OSX 上也取得了一些成功,语法如下:

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

我使用dSIMPLE而不是dCOMPLEX因为后者每行输出 1 个字符。

于 2014-02-25T17:19:40.183 回答
6

Docotic.Pdf 库可用于从 PDF 文件中提取文本作为纯文本或文本块的集合,每个块都有坐标。

Docotic.Pdf 也可用于从 PDF 中提取图像

免责声明:我为 Bit Miracle 工作。

于 2011-04-15T15:14:33.983 回答
5

由于问题是关于从PDF 中获取 XML数据的替代工具,因此您可能有兴趣查看能够做到这一点的商业工具“ByteScout PDF Extractor SDK”:从 PDF 中提取文本为 XML 以及定位数据 (x,y) 和字体信息:

源 PDF 中的文本:

Products | Units | Price 

输出 XML:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

PS:此外,它还将文本分解为基于表格的结构。

披露:我为 ByteScout 工作

于 2015-02-10T14:46:50.910 回答
3

我知道这个话题已经很老了,但是这种需求仍然存在。我阅读了许多文档、论坛和脚本,并构建了一个支持压缩和未压缩 pdf 的新高级文档:

https://gist.github.com/smalot/6183152

在某些情况下,出于安全原因禁止使用命令行。因此,原生 PHP 类可以满足许多需求。

希望对大家有帮助

于 2013-08-08T10:04:49.007 回答
3

我目前能想到的最好的东西(在“简单”工具列表中)是Ghostscript(当前版本是 v.8.71)和 PostScript 实用程序ps2ascii.ps。Ghostscript 将它放在其lib子目录中。试试这个(在 Windows 上):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

此命令处理第 3-7 页的input.pdf. ps2ascii.ps阅读文件本身的注释,了解“奇怪”的数字和附加信息的含义(它们表示字符串、位置、宽度、颜色、图片、矩形、字体和分页符......)。要获得“简单”的文本输出,请将-dCOMPLEX部分替换为-dSIMPLE.

于 2010-09-07T00:13:57.350 回答
2

Apache pdfbox 具有此功能 - 文本部分描述如下:

http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html

有关示例实现,请参见 https://github.com/WolfgangFahl/pdfindexer

测试用例 TestPdfIndexer.testExtracting 展示了它是如何工作的

于 2014-03-07T13:53:21.323 回答
2

对于图像提取,pdfimages 是适用于 Linux 或 Windows (win32) 的免费命令行工具:

pdfimages:从可移植文档格式 (PDF) 文件中提取和保存图像

于 2013-02-18T22:45:15.370 回答
1

QuickPDF 似乎是一个合理的库,应该以合理的价格做你想做的事。

http://www.quickpdflibrary.com/ - 他们有 30 天的试用期。

于 2010-09-07T14:46:53.697 回答
0

在我的 Macintosh 系统上,我发现“Adobe Reader”做得相当不错。我在我的桌面上创建了一个指向“Adobe Reader.app”的别名,我所做的就是在别名上放置一个 pdf 文件,使其成为 Adob​​e Reader 中的活动文档,然后从文件菜单中,我选择“另存为文本...”,给它一个名称和保存位置,单击“保存”,我就完成了。

于 2015-01-12T05:24:29.980 回答