任何人都可以推荐一个库/ API来从PDF中提取文本和图像吗?我们需要能够获得包含在文档的预先知道区域中的文本,因此API需要向我们提供页面上每个元素的位置信息 .
我们希望以 xml
或 json
格式输出数据 . 我们目前正在寻找看起来相当不错的PdfTextStream,但希望听到其他人的经验和建议 .
Are there alternatives (commercial ones or free) for extracting text from a pdf programatically?
15 回答
Docotic.Pdf library可以用作extract text from PDF文件作为纯文本或具有每个块的坐标的文本块的集合 .
Docotic.Pdf也可用于extract images from PDFs .
免责声明:我为Bit Miracle工作 .
其中一条评论在Windows上使用了gs . 我在Linux / OSX上也取得了一些成功,使用以下语法:
我使用了
dSIMPLE
而不是dCOMPLEX
,因为后者每行输出1个字符 .我得到了一个400页的pdf文件,其中包含我必须导入的数据表 - 幸运的是没有图像 . Ghostscript为我工作:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
输出文件被拆分成带有 Headers 等的页面,但是很容易编写一个应用程序来删除空行等,并吸入所有30,000条记录 .
-dSIMPLE
和-dCOMPLEX
在这种情况下没有区别 .从今天起我就知道了: best thing for text extraction from PDFs 是TET, the text extraction toolkit . TET是PDFlib.com系列产品的一部分 .
PDFlib.com是Thomas Merz的公司 . 如果你不认识他的名字:托马斯梅尔兹是“PostScript和PDF圣经”的作者 .
TET的第一个化身是a library . 那个人可能会做Budda006想要的一切,包括关于页面上每个元素的位置信息 . 哦,它也可以提取图像 . 它重新组合碎片成片 .
pdflib.com还提供了这项技术的另一个版本,TET plugin for Acrobat . 而第三个化身是PDFlib TET iFilter . 这是用户桌面的独立工具 . 这些都是免费的(如在啤酒中)用于私人,非商业目的 .
它真的很强大 . 比Adobe自己的文本提取方式更好 . 它为我提取了文本,其他工具(包括Adobe的)只会吐出垃圾 .
我刚刚测试了桌面独立工具,他们在网页上说的是真的 . 它有一个非常好的命令行 . 我的一些“有问题”的PDF测试文件工具处理完全令我满意 .
从现在开始,这件事将成为我对每一个复杂而具有挑战性的PDF文本提取要求的建议 .
TET简直太棒了 . 它检测表格 . 在表格中,它标识跨越多列的单元格 . 它分别标识每个表格单元格的表格行和内容 . 它可以很好地处理连字符:它删除连字符并恢复完整的单词 . 它支持非ASCII语言(包括CJK,阿拉伯语和希伯来语) . 遇到连字时,它会恢复原始字符......
试试看 .
一个高效的命令行工具,开源,免费,可在linux和windows上使用:简称pdftotext . 该工具是xpdf库的一部分 .
http://en.wikipedia.org/wiki/Pdftotext
对于python,有PDFMiner和pyPDF2 . 有关这些的更多信息,请参阅Python module for converting PDF to text .
这是我的建议 . 如果要从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等 .
我希望它有所帮助 .
PdfTextStream(你说你一直在看)现在 free 用于单线程应用程序 . 在我看来,它的质量比其他库(特别是像时髦的嵌入字体等)更好 .
或者,你应该看看Apache PDFBox,开源 .
由于问题是关于从PDF获取数据的替代工具,因此您可能有兴趣看一下能够做到这一点的商业工具"ByteScout PDF Extractor SDK":从PDF中提取文本作为XML以及定位数据(x ,y)和字体信息:
源PDF中的文字:
输出XML:
P.S . :另外它也是将文本分成基于表的结构 .
披露:我为ByteScout工作
我目前可以想到的最好的事情(在"simple"工具列表中)是Ghostscript(当前版本是v.8.71)和PostScript实用程序
ps2ascii.ps
. Ghostscript将其发送到lib
子目录中 . 试试这个(在Windows上):此命令处理
input.pdf
的第3-7页 . 阅读ps2ascii.ps
文件本身中的注释,以查看"weird"数字和附加信息的含义(它们表示字符串,位置,宽度,颜色,图片,矩形,字体和分页符......) . 要获得"simple"文本输出,请将-dCOMPLEX
部分替换为-dSIMPLE
.对于图像提取,pdfimages是Linux或Windows(win32)的免费命令行工具:
pdfimages: Extract and Save Images From A Portable Document Format ( PDF ) File
Apache pdfbox具有此功能 - 文本部分描述于:
http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html
有关示例实现,请参阅https://github.com/WolfgangFahl/pdfindexer
测试用例TestPdfIndexer.testExtracting显示了它的工作原理
QuickPDF似乎是一个合理的库,应该以合理的价格做你想要的 .
http://www.quickpdflibrary.com/ - 他们有30天的试用期 .
我知道这个话题已经很老了,但这个需求仍然存在 . 我阅读了许多文档,论坛和脚本,并构建了一个支持压缩和未压缩pdf的新的高级文档:
https://gist.github.com/smalot/6183152
在某些情况下,出于安全原因,禁止使用命令行 . 因此,本机PHP类可以满足许多需求 .
希望它能帮到你
在我的Macintosh系统上,我发现“Adobe Reader”做得相当不错 . 我在桌面上创建了一个指向“Adobe Reader.app”的别名,我所做的就是在别名上放一个pdf文件,这使它成为Adobe Reader中的活动文档,然后从文件菜单中,我选择“另存为文本...”,给它命名并在哪里保存,单击“保存”,我就完成了 .