0

Java中有没有办法逐行读取PDF并将其转换为文本?我以前使用过 iTextPDFParser,但它逐页而不是逐行读取。这有一些缺点。让我知道是否有任何方法可以逐行阅读 PDF。

4

1 回答 1

3

在开始之前,你应该问自己一些更抽象的问题。第一个是“什么是文档中的一行文本?” 你看,问题在于 PDF 代表了一组非常大的可打印文档(我不会说全部,但它非常接近)。

文本放置在带有多个运算符的页面上:Tj ' " TJ. 例如(a string) Tj,在当前字体中放置“一个字符串”以及页面上的当前文本转换(字/字符间距/缩放、转换矩阵)。甚至这也被过度简化了,因为字符串中的 8 位字符可能会以各种奇怪的方式解释,具体取决于用于此字体实例的编码。

所以让我们这样看 - 如果您将文本按行放置在页面上,生成应用程序可能会很好地使用'移动到下一行并放置一行文本的运算符。这很棒,逐行提取很容易。如果应用程序决定将所有纯文本放在页面上,然后是所有斜体文本,然后是所有粗体文本(我在看的troff),那么你不会按照你期望的顺序得到东西。事实上,应用程序可以按照您想要的任何可能顺序将文本放置在页面上。

好的,您说,只需将文本按阅读顺序排序即可。这很容易。你得到每段文本的边界框,并从上到下从左到右进行排序。列呢?插页框呢?小型股或初始下跌股呢?下标和上标呢?地图上沿道路或河流轮廓的文本会怎样?无论如何,阅读顺序是什么?如果文本是汉字怎么办?如果它是汉字和英语的混合体怎么办?如果是带数字的希伯来语怎么办?连字怎么办? 无论如何,单词边界在哪里?如果一个词一次放置一个字形怎么办?我怎么知道字形何时是单词的一部分,我应该放在空格中?如果页面上没有空格怎么办?自由连字符呢?

这让您了解问题的范围以及在解释典型文本提取的输出时需要考虑的事项。大多数 PDF 文本提取工具可以提取文本、撤消编码、退火字词和排序。

我在 Acrobat 1.0 和 2.0 中使用文本提取工具,我们几乎点击了该列表中的所有内容。我们有一位工程师/研究人员全职从事 2.0 产品中的文本提取代码工作,他在 1.0 产品的中间阶段开始工作 - 接近两年才能做到这一点(ish)。

所以你要逐行吗?卷起你的袖子。

于 2013-08-28T14:03:19.623 回答