如何从 PDF 中提取文本?

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

我们希望输出的数据是 xmljson格式。我们目前正在看的 PdfTextStream似乎相当不错,但想听听其他人的经验和建议。

有没有替代品(商业或免费)提取文本从一个 pdf 程序?

291403 次浏览

目前我能想到的最好的东西(在“简单”工具列表中)是 影子剧本(当前版本是 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

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

QuickPDF 似乎是一个合理的库,它应该能够以合理的价格满足您的需求。

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

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

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

TET 的第一个化身是 图书馆。它可以完成 Budda006想要的任何事情,包括关于页面上每个元素的位置信息。还可以提取图像。它将碎片化的图像重新组合。

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

它真的很强大。比 Adobe 自己的文本提取好多了。它为我提取了其他工具(包括 Adobe 的)只能吐出垃圾的文本。

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

从现在开始,这将是我对每一个复杂和富有挑战性的 PDF 文本提取需求的建议。

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

试试看。

医生。PDF 库 可以作为纯文本或作为带有每个块的坐标的文本块的集合使用于 从 PDF 中提取文本文件。

PDF 也可以用于 从 PDF 中提取图像

免责声明: 我为“比特奇迹”工作。

对于单线程应用程序,PdfTextStream (您说您一直在关注它)现在是 自由。在我看来,它的质量比其他图书馆(尤其是。例如时髦的嵌入式字体等)。

它可以在 Java 和 C # 中使用。

或者,你应该看看 Apache PDFBox,开源的。

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

Pdfimages: 从便携式文件格式(PDF)文件中提取和保存图像

对于 python,有 PDFMinerPyPDF2

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

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

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

希望能帮到大家

这是我的建议。 如果您想从 PDF 中提取文本,您可以将 PDF 文件导入到 Google Docs 中,然后将其导出为更友好的格式,如。超文本标记语言。奥道夫。Rtf.等等。所有这些都使用了驱动器 API。它是自由而坚固的。请看:

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

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

希望能有所帮助。

这里的一条注释在 Windows 上使用了 gs。我在 Linux/OSX 上也有一些成功的例子,语法如下:

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

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

Apache pdfbox 有这个特性-文本部分描述如下:

Http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/pdftextstripper.html

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

Testcase TestPdfIndex.test萃取展示了它是如何工作的

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

Http://en.wikipedia.org/wiki/pdftotext

我得到了一个400页的 pdf 文件,里面有一个我必须导入的数据表——幸运的是没有图片。影子剧本为我工作:

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

输出文件被分割成带有页眉等等的页面,但是编写一个应用程序去掉空行等等很容易,并且可以吸收所有30,000条记录。在这种情况下,-dSIMPLE-dCOMPLEX没有什么不同。

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

因为这个问题是关于从 PDF 格式为 XML 格式获取数据的替代工具,所以你可能有兴趣看看商业工具 “ ByteScout PDF 提取器 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>

另外,它还将文本分解为基于表的结构。

披露: 我为 ByteScout 工作