提问人:Budda007 提问时间:9/6/2010 最后编辑:JonathanBudda007 更新时间:9/29/2023 访问量:302524
如何从 PDF 中提取文本?[已结束]
How to extract text from a PDF? [closed]
问:
我们不允许向读者、工具、软件库等寻求推荐的问题。您可以编辑问题,以便用事实和引文来回答。
8年前关闭。
社区去年审查了是否重新讨论这个问题,并关闭了它:
原始关闭原因未解决
任何人都可以推荐一个库/API 来从 PDF 中提取文本和图像吗? 我们需要能够获取包含在文档的预先已知区域中的文本,因此 API 需要为我们提供页面上每个元素的位置信息。
我们希望该数据以 或 格式输出。我们目前正在研究 PdfTextStream,它看起来不错,但想听听其他人的经验和建议。xml
json
是否有以编程方式从 pdf 中提取文本的替代方案(商业或免费)?
答:
我目前能想到的最好的东西(在“简单”工具列表中)是 Ghostscript(当前版本是 v.8.71)和 PostScript 实用程序。Ghostscript 将其放在其子目录中。试试这个(在 Windows 上):ps2ascii.ps
lib
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
QuickPDF 似乎是一个合理的库,应该以合理的价格做你想做的事。
http://www.quickpdflibrary.com/ - 他们有 30 天的试用期。
从今天开始,我就知道了:从 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、阿拉伯语和希伯来语)。遇到连字时,会还原原有字符......
试一试。
评论
Docotic.Pdf 库可用于将 PDF 文件中的文本提取为纯文本或文本块的集合,每个块都有坐标。
Docotic.Pdf 也可用于从 PDF 中提取图像。
免责声明:我为Bit Miracle工作。
PdfTextStream(您说您一直在查看)现在对单线程应用程序免费。在我看来,它的质量比其他库要好得多(尤其是时髦的嵌入式字体等)。
它以 Java 和 C# 版本提供。
或者,你应该看看Apache PDFBox,开源。
评论
对于图像提取,pdfimages 是适用于 Linux 或 Windows (win32) 的免费命令行工具:
pdfimages: 从可移植文档格式 ( PDF ) 文件中提取和保存图像
对于 python,有 PDFMiner 和 pyPDF2。有关这些内容的更多信息,请参阅用于将 PDF 转换为文本的 Python 模块。
我知道这个话题已经很老了,但这种需求仍然存在。我阅读了许多文档、论坛和脚本,并构建了一个支持压缩和未压缩 pdf 的新高级文档:
https://gist.github.com/smalot/6183152
在某些情况下,出于安全原因,禁止使用命令行。 因此,原生 PHP 类可以满足许多需求。
希望它对大家有所帮助
这是我的建议。 如果要从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 等。
我希望它有所帮助。
评论
gs
pdftotext
这里的一条评论在 Windows 上使用了 gs。我在 Linux/OSX 上也取得了一些成功,语法如下:
gs \
-q \
-dNODISPLAY \
-dSAFER \
-dDELAYBIND \
-dWRITESYSTEMDICT \
-dSIMPLE \
-f ps2ascii.ps \
"${input}" \
-dQUIET \
-c quit
我使用了 instead 而不是,因为后者每行输出 1 个字符。dSIMPLE
dCOMPLEX
Apache pdfbox 具有此功能 - 文本部分在以下描述中描述:
http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html
有关示例实现,请参阅 https://github.com/WolfgangFahl/pdfindexer
测试用例 TestPdfIndexer.testExtracting 显示了它是如何工作的
一个高效的命令行工具,开源,免费,可在 linux 和 windows 上使用:简称为 pdftotext。此工具是 xpdf 库的一部分。
http://en.wikipedia.org/wiki/Pdftotext
评论
-layout
gs
pdftext
-layout
gs
brew install poppins
pdftotext
我得到了一个 400 页的 pdf 文件,其中包含我必须导入的数据表 - 幸运的是没有图像。Ghostscript 对我有用:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
输出文件被拆分为带有标题等的页面,但随后很容易编写一个应用程序来去除空白行等,并吸收所有 30,000 条记录。 在这种情况下没有区别。-dSIMPLE
-dCOMPLEX
评论
gs
gswin64c
gswin64c -sDEVICE=txtwrite -o- input.pdf
在我的 Macintosh 系统上,我发现“Adobe Reader”做得相当不错。我在桌面上创建了一个指向“Adobe Reader.app”的别名,我所要做的就是在别名上放置一个 pdf 文件,使其成为 Adobe Reader 中的活动文档,然后从文件菜单中,我选择“另存为文本...”,给它一个名称和保存位置,单击“保存”,我就完成了。
评论
由于问题专门针对从 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>
P.S.:此外,它还将文本分解为基于表格的结构。
披露:我在 ByteScout 工作
评论
/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg