Bud*_*007 141 pdf text text-extraction ghostscript extraction
任何人都可以推荐一个库/ API来从PDF中提取文本和图像吗?我们需要能够获得包含在文档的预先知道区域中的文本,因此API需要向我们提供页面上每个元素的位置信息.
我们希望以数据xml或json格式输出数据.我们目前正在寻找看起来相当不错的PdfTextStream,但希望听到其他人的经验和建议.
是否有以编程方式从pdf中提取文本的替代品(商业或免费)?
小智 99
我得到了一个400页的pdf文件,其中包含我必须导入的数据表 - 幸运的是没有图像.Ghostscript为我工作:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
输出文件被拆分成带有标题等的页面,但是很容易编写一个应用程序来删除空行等,并吸入所有30,000条记录.-dSIMPLE并且-dCOMPLEX在这种情况下没有任何区别.
Kur*_*fle 34
从今天起我就知道了:从PDF文本中提取文本的最好方法是文本提取工具包TET.TET是PDFlib.com系列产品的一部分.
PDFlib.com是Thomas Merz的公司.如果你不认识他的名字:托马斯梅尔兹是"PostScript和PDF圣经"的作者.
TET的第一个化身是图书馆.那个人可能会做Budda006想要的一切,包括关于页面上每个元素的位置信息.哦,它也可以提取图像.它重新组合碎片成片.
pdflib.com还提供了这项技术的另一个版本,即Acrobat的TET插件.第三个版本是PDFlib TET iFilter.这是用户桌面的独立工具.这些都是免费的(如在啤酒中)用于私人,非商业目的.
它真的很强大.比Adobe自己的文本提取方式更好.它为我提取了文本,其他工具(包括Adobe的)只会吐出垃圾.
我刚刚测试了桌面独立工具,他们在网页上说的是真的.它有一个非常好的命令行.我的一些"有问题"的PDF测试文件工具处理完全令我满意.
从现在开始,这件事将成为我对每一个复杂而具有挑战性的PDF文本提取要求的建议.
TET简直太棒了.它检测表格.在表格中,它标识跨越多列的单元格.它分别标识每个表格单元格的表格行和内容.它可以很好地处理连字符:它删除连字符并恢复完整的单词.它支持非ASCII语言(包括CJK,阿拉伯语和希伯来语).遇到连字时,它会恢复原始字符......
试试看.
131*_*131 27
一个高效的命令行工具,开源,免费,可在linux和windows上使用:简称pdftotext.该工具是xpdf库的一部分.
http://en.wikipedia.org/wiki/Pdftotext
oab*_*rca 11
这是我的建议.如果要从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等.
我希望它有所帮助.
其中一条评论在Windows上使用了gs.我在Linux/OSX上也取得了一些成功,使用以下语法:
gs \
-q \
-dNODISPLAY \
-dSAFER \
-dDELAYBIND \
-dWRITESYSTEMDICT \
-dSIMPLE \
-f ps2ascii.ps \
"${input}" \
-dQUIET \
-c quit
Run Code Online (Sandbox Code Playgroud)
我用dSIMPLE而不是dCOMPLEX因为后者每行输出1个字符.
由于问题特别是关于从PDF 作为 XML获取数据的替代工具,因此您可能有兴趣查看商业工具“ByteScout PDF Extractor SDK”,它能够做到这一点:从 PDF 中提取文本作为 XML 以及定位数据 (x,y) 和字体信息:
源 PDF 中的文本:
Products | Units | Price
Run Code Online (Sandbox Code Playgroud)
输出 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>
Run Code Online (Sandbox Code Playgroud)
PS:此外,它还将文本分解为基于表格的结构。
披露:我为 ByteScout 工作
我目前能想到的最好的东西(在“简单”工具列表中)是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
Run Code Online (Sandbox Code Playgroud)
此命令处理 的第 3-7 页input.pdf。阅读文件本身中的注释,ps2ascii.ps了解“奇怪”的数字和附加信息的含义(它们表示字符串、位置、宽度、颜色、图片、矩形、字体和分页符...)。要获得“简单”文本输出,请将-dCOMPLEX部分替换为-dSIMPLE。