如何从PDF中提取文本?
任何人都可以推荐一个图书馆/ API从PDF提取文本和图像? 我们需要能够获取包含在文档的预知区域中的文本,因此API需要向我们提供页面上每个元素的位置信息。
我们希望这些数据以xml
或json
格式输出。 我们目前正在寻找似乎相当不错的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也提供了这种技术的另一个化身,即Acrobat的TET插件 。 而第三个版本是PDFlib TET iFilter 。 这是用户桌面的独立工具。 这些都是免费的(如啤酒),用于私人,非商业目的。
这真的很强大。 比Adobe自己的文本提取更好。 它为我提取了其他工具(包括Adobe的)只会吐出垃圾的文本。
我只是testing了桌面独立工具,他们在网页上说的是真的。 它有一个非常好的命令行。 我的一些“问题”PDFtesting文件的工具处理,我完全满意。
从现在起,这件事将是我对每一个复杂和具有挑战性的PDF文本提取要求的build议。
TET简直太棒了。 它检测表。 在表格中,它标识跨越多列的单元格。 它分别标识每个表格单元的表格行和内容。 它连字符处理得非常好:它删除连字符并恢复完整的单词。 它支持非ASCII的语言(包括CJK,阿拉伯语和希伯来语)。 当遇到连字时,它恢复原始字符…
试一试。
对于python,有PDFMiner和pyPDF2 。 有关这些的更多信息,请参阅Python模块将PDF转换为文本 。
一个高效的命令行工具,开源,免费,可在Linux和Windows上使用:简单地命名为pdftotext。 这个工具是xpdf库的一部分。
这是我的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,位置,宽度,颜色,图片,矩形,字体和分页符 )。 要获得“简单”文本输出,请用-dCOMPLEX
replace-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“另存为文本…”,给它起一个名字,在哪里保存,点击“保存”,我就完成了。