谁能推荐一个库/ API来从PDF中提取文本和图像?我们需要能够获取文档的已知区域中包含的文本,因此API需要向我们提供页面上每个元素的位置信息。
我们希望将数据输出到 xml
或json
格式。我们目前正在看的PdfTextStream看起来不错,但是希望听到其他人的经验和建议。
是否可以通过编程方式从pdf提取文本的替代方法(商业方法或免费方法)?
/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg
。它仅查找Tj / TJ运算符,该运算符表示PDF中的所有普通文本。
谁能推荐一个库/ API来从PDF中提取文本和图像?我们需要能够获取文档的已知区域中包含的文本,因此API需要向我们提供页面上每个元素的位置信息。
我们希望将数据输出到 xml
或json
格式。我们目前正在看的PdfTextStream看起来不错,但是希望听到其他人的经验和建议。
是否可以通过编程方式从pdf提取文本的替代方法(商业方法或免费方法)?
/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg
。它仅查找Tj / TJ运算符,该运算符表示PDF中的所有普通文本。
Answers:
我得到了一个400页的pdf文件,其中包含必须导入的数据表-幸运的是没有图像。Ghostscript为我工作:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
输出文件被分成带有标题等的页面,但是随后很容易编写一个应用程序以去除空白行等,并吸收所有30,000条记录。-dSIMPLE
并-dCOMPLEX
提出在这种情况下没有区别。
gs
代替gswin64c
。完美运作。没有专利的有偿废话。它只是工作。
-sDEVICE=txtwrite
办?阅读《如何使用Ghostscript》
gswin64c -sDEVICE=txtwrite -o- input.pdf
。来源(由我稍作更改):gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526ac
从今天开始我就知道了:从PDF提取文本的最好方法是TET,即文本提取工具包。TET是PDFlib.com产品家族的一部分。
PDFlib.com是Thomas Merz的公司。如果您不知道他的名字:托马斯·梅尔兹(Thomas Merz)是《 PostScript和PDF圣经》的作者。
TET的第一个化身是图书馆。那可能可以完成Budda006想要的所有事情,包括有关页面上每个元素的位置信息。哦,它也可以提取图像。它重新组合成碎片的图像。
pdflib.com还提供了该技术的另一种形式,即Acrobat的TET插件。第三类是PDFlib TET iFilter。这是用于用户桌面的独立工具。两者都是免费的(例如在啤酒中),可用于私人,非商业目的。
它真的很强大。比Adobe自己的文本提取更好。它为我提取了其他工具(包括Adobe的工具)仅吐出垃圾的文本。
我刚刚测试了桌面独立工具,他们在网页上所说的是正确的。它有一个非常好的命令行。我对某些“有问题的” PDF测试文件的处理感到非常满意。
从现在开始,对于所有复杂且具有挑战性的PDF文本提取要求,我都会建议您这样做。
TET真是太棒了。它检测表。在表内部,它标识跨多个列的单元格。它分别标识表行和每个表单元格的内容。它可以很好地处理连字符:它删除连字符并恢复完整的单词。它支持非ASCII语言(包括CJK,阿拉伯语和希伯来语)。遇到连字时,它会还原原始字符...
试试看。
一个有效的命令行工具,开源,免费且免费,可在linux和Windows上使用:简称为pdftotext。该工具是xpdf库的一部分。
-layout
开关保存表,效果很好。
对于python,有PDFMiner和pyPDF2。有关这些的更多信息,请参见用于将PDF转换为文本的Python模块。
这是我的建议。如果要从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
因为它是rest API,所以它与所有编程语言兼容。我发布的链接包含许多语言的有效示例,包括:Java,.NET,Python,PHP,Ruby和其他语言。
希望对您有所帮助。
PdfTextStream(您说过您一直在看)现在对单线程应用程序免费。在我看来,它的质量比其他库要好得多(尤其是对于时髦的嵌入式字体等而言)。
另外,您应该看看Apache PDFBox开源。
由于该问题专门针对以XML格式从PDF获取数据的替代工具,因此您可能有兴趣查看商业工具“ ByteScout PDF Extractor SDK”能够做到这一点:以XML的形式从PDF中提取文本以及定位数据(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:此外,它还将文本分成基于表格的结构。
披露:我为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
此命令处理的页面3-7 input.pdf
。阅读ps2ascii.ps
文件本身中的注释,以查看“怪异”数字和其他信息的含义(它们表示字符串,位置,宽度,颜色,图片,矩形,字体和分页符...)。要获得“简单”的文本输出,请用替换-dCOMPLEX
零件-dSIMPLE
。
ps2ascii book.pdf notes.txt
。如果您的文档主要是ASCII,那么您很幸运。
我知道这个话题已经很老了,但是这种需求仍然存在。我阅读了许多文档,论坛和脚本,并构建了一个支持压缩和未压缩pdf的新的高级文档:
https://gist.github.com/smalot/6183152
在某些情况下,出于安全原因,命令行被禁止。因此,本机PHP类可以满足许多需求。
希望对大家有帮助
对于图像提取,pdfimages是用于Linux或Windows(win32)的免费命令行工具:
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天的试用期。