繁体   English   中英

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

[英]Best way to extract text from PDF in java

我想制作一个能够读取 PDF 文件并解析其内容的程序。 因此我需要使用某种库来提取文本。 我找到了 3 种方法。

  1. OCR 库(如 Tesseract)
  2. ScanPdf 库(如 iText)
  3. 从 PDF 到文本的转换器。

我无法理解它们之间的巨大差异,因为它们最终都会从 PDF 生成一个文本文件。 那么关于这个问题,go 的最佳方法是什么?

PDF 是一种复杂的格式。 如果您打开 PDF 并且您正在盯着一堆文本,那并不能真正告诉您太多。 可能是您正盯着某人决定打包到 PDF 文件中的图像文件。 如果有人扫描了文档并告诉他们的扫描仪“扫描到 PDF”,这是 99%+,如果您有 PNG 或 JPG 并“另存为 PDF”,或者尝试“打印到PDF'这样的事情。

然后 PDF 中没有文本 有像素。

要将像素转换为文本,这就是 OCR 库的用武之地。这就是他们所做的。 这就是他们所做的一切。 这是一个人工智能的财富,而且容易出错。 没有保证。

然而,PDF 比这更复杂,它不像 PNG/JPG:它更像是 HTML。 您可以在其中放置实际文本。

不过,这有不同的问题。 您可以放置文本块(即“矩形”,带有坐标,然后是应该在 go 内的文本)。 再次很像 HTML:您可以执行以下操作:

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

然后创建 CSS 以便在bar之后呈现foo (可以像.foo, .bar { display: block; }.foo {float: right}一样简单)。

将 HTML 变成“世界,你好”。 并不是那么棘手,意识到在渲染过程中,您最终会看到“Hello, World”,因此编写返回“Hello. World!”的代码,这要复杂得多。

同样的问题也适用于 PDF。 对于简单的 PDF,提取其中的原始文本并不太难,但请注意,即使是稍微复杂的 PDF,文本也可能杂乱无章。

iText 试图给你足够的力量,至少,提供后者:给你一个完整的层次分解。 它返回'这里是一个文本框,这里是它的定位,这里是里面的文本。 现在这里是另一个文本框,等等'。 它不会返回一个大字符串。

换句话说:答案很大程度上取决于您拥有哪些 PDF/您希望能够阅读哪些 PDF,以及它们的复杂程度。 如果是扫描,则需要 OCR 库。 如果它们很简单,一个基本的 pdf2text 转换器就可以了。 如果您想尝试考虑内部带有 forms 和可以打开和关闭的“弹出窗口”的精美定位 PDF,oof。 可能所有这些工具都不够用,而且你注册了很多人周的努力。

您还可以尝试另一个名为Free Spire.PDF 的免费 API 用于 Java从 ZBCD1B68617A3B5A10 文档中提取文本。 在提取文本的过程中,可以选择提取PDF中的所有文本,或者从特定区域或特定页面提取文本。

了解package

教程中你可以找到代码片段

肯定有嵌入文本的 PDF,它不仅仅是像素。

这取决于 PDF 是否是“真实的” PDF(即您可以突出显示文本并将其复制并粘贴到其他地方)或者 PDF 是否是扫描图像。

对于扫描的图像,您必须使用 OCR API。 所有主要的云提供商都有 OCR API(即 Amazon Textract、Google Document AI、Microsoft Form Recognizer 等)。 If it's a true PDF, then I've found the pdf.js library ( https://mozilla.github.io/pdf.js/ ) quite helpful in doing a direct text extraction.

只要知道这样做只会让您获得页面上的文字,并且还有很多工作要做才能以编程方式跨许多文档获取键/值数据字段。

如果您对更强大的东西感兴趣,这也是我的初创公司正在研究的东西( www.sensible.so/ )!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM