java中从pdf中提取文本的最佳方法

qcuzuvrc  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(676)

我想做一个程序,能够读取pdf文件和解析它的内容。因此,我需要使用某种库来提取文本。我找到了三种方法。
ocr库(如tesseract)
scanpdf库(如itext)
从pdf到文本的转换器。
我无法理解它们之间的巨大差异,因为它们最终都会从pdf生成一个文本文件。那么哪种方法是最好的呢?

vptzau2j

vptzau2j1#

您还可以尝试另一个名为free spire.pdf for java的免费api,从pdf文档中提取文本。在提取文本的过程中,可以选择“提取pdf中的所有文本”,也可以选择从特定区域或特定页面提取文本。
了解包裹
在教程中你可以找到代码片段

q1qsirdb

q1qsirdb2#

pdf是一种复杂的格式。如果你打开一个pdf文件,你盯着一堆文本,这并不能告诉你很多。可能是你盯着一个有人决定打包成pdf文件的图像文件。如果有人扫描了一个文档并告诉他们的扫描仪“扫描到pdf”,这是99%+肯定的,如果你有png或jpg和“另存为pdf”,或者尝试“打印到pdf”这样的东西,这是100%肯定的。
pdf中没有文本。有像素。
为了将像素转换成文本,ocr库就应运而生。他们就是这么做的。他们就是这么做的。这是一个人工智能的财富和容易出错。没有保证。
然而,pdf比这更复杂,它不像png/jpg:它更像html。你可以把真正的文字放进去。
不过,这有不同的问题。您可以放置文本blob(即一个带坐标的“矩形”,然后是应该放进去的文本)。同样类似于html:您可以执行以下操作:

<p class="foo">
World!
</p>
<p class="bar">
Hello,
</p>

然后创建css以便 foobar 块(可以简单到 .foo, .bar { display: block; } .foo {float: right} ).
把html变成“世界!“你好”并不是那么棘手。意识到在渲染过程中,最终会看到“你好,世界!”,因此,编写返回“你好,世界!”的代码,那要复杂得多。
同样的问题也适用于pdf。对于简单的PDF来说,提取里面的原始文本并不太困难,但是要注意,即使是稍微复杂的PDF,文本也可能杂乱无章地到达。
itext试图给你足够的权力,至少,提供后者:给你一个完整的层次分解。它返回“这是一个文本框,这是它的位置,这是里面的文本。现在这里是另一个文本框,等等。它不返回大字符串。
换句话说:答案在很大程度上取决于你拥有什么样的PDF/你期望能够阅读什么样的PDF,以及它们有多复杂。如果是扫描,你需要一个ocr库。如果它们很简单,一个基本的pdf2文本转换器就可以了。如果你想尝试考虑到富丽堂皇的PDF格式,里面有表格和可以打开和关闭的弹出窗口,oof。可能所有这些工具都是不够的,你注册了许多人周值得努力。

相关问题