如何从PDF中提取文本?

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

我们希望这些数据以xmljson格式输出。 我们目前正在寻找似乎相当不错的PdfTextStream ,但希望听到其他人的经验和build议。

有没有替代品(商业或免费)从PDF中提取文本编程?

我得到一个400页的pdf文件,里面有一张我不得不导入的数据表格 – 幸运的是没有图像。 Ghostscript为我工作:

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

输出文件被分割成页头等,但是写一个应用程序去掉空白行等等,并且吸引所有30,000条logging是很容易的。 -dSIMPLE-dCOMPLEX在这种情况下没有任何区别。

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

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

TET的第一个化身是一个图书馆 。 那个人可以做Budda006所需的一切,包括关于页面上每个元素的位置信息。 哦,它也可以提取图像。 它重新组合碎片的图像。

pdflib.com也提供了这种技术的另一个化身,即AcrobatTET插件 。 而第三个版本是PDFlib TET iFilter 。 这是用户桌面的独立工具。 这些都是免费的(如啤酒),用于私人,非商业目的。

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

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

从现在起,这件事将是我对每一个复杂和具有挑战性的PDF文本提取要求的build议。

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

试一试。

对于python,有PDFMiner和pyPDF2 。 有关这些的更多信息,请参阅Python模块将PDF转换为文本 。

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

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

这是我的build议。 如果您想从PDF中提取文本,您可以将PDF文件导入Google文档,然后将其导出为更加友好的格式,如.html,.odf,.rtf,.txt等。所有这些使用Drive 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和其他。

我希望它有帮助。

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

另外,你应该看看Apache PDFBox ,开源。

Docotic.Pdf库可以用来从PDF文件中以纯文本的forms提取文本,也可以用作为每个块的坐标的文本块的集合。

Docotic.Pdf也可以用来从PDF中提取图像 。

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

其中一个评论在Windows上使用了gs。 我在Linux / OSX上也取得了一些成功,使用下面的语法:

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

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

免责声明:我为ByteScout工作

由于这个问题是专门关于从PDF获取数据的替代工具,因此您可能有兴趣查看商业工具“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:另外它也将文本分解成基于表格的结构。

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

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

Apache pdfbox具有此function – 文本部分描述如下:

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

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

testing用例TestPdfIndexer.testExtracting显示它是如何工作的

我现在想到的最好的东西(在“简单”工具列表中)是Ghostscript (当前版本是v.7.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文件中的注释,了解“怪异”数字和附加信息的含义( 它们表示string,位置,宽度,颜色,图片,矩形,字体和分页符 )。 要获得“简单”文本输出,请用-dCOMPLEXreplace-dCOMPLEX部分。

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

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

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

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

在某些情况下,出于安全原因,命令行被禁止。 所以一个原生的PHP类可以满足很多需求。

希望它有助于everone

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