gpt4 book ai didi

pdfbox - Apache PDFBox 删除字符之间的空格

转载 作者:行者123 更新时间:2023-12-04 18:39:41 28 4
gpt4 key购买 nike

我们正在使用 PDFBox 从 PDF 中提取文本。

某些 PDF 的文本无法正确提取。
下图显示了 PDF 中的一部分作为图像:

enter image description here

文本提取后,我们得到以下文本:
3, 8 5 EU R 1 Netto 38,50 EUR 4,00
(','和'8'之间加空格)

这是我们的代码:

            PDDocument pdf = PDDocument.load(reuseableInputStream);
PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setSortByPosition(true);
String text = pdfStripper.getText(pdf);

我们尝试使用 PDFTextStripper 属性“AverageCharTolerance”和“SpacingTolerance”,但没有任何积极影响。

替代库 'iText' 正确提取文本,字符之间没有空格。但是因为许可证问题我们不能使用它。

有任何想法吗?谢谢你。

编辑:我们使用的是 1.8.9 版。我们还尝试了快照版本 2.0.0,但没有效果。

最佳答案

原因

检查 OP 提供的文件,结果发现问题是由实际存在的额外空间引起的!从同一个起始位置绘制了多个字符串;在每个位置至多这些字符串之一具有非空格字符。因此,PDF 查看器输出看起来不错,但作为文本提取器的 PDFBox 试图利用找到的所有字符,包括那些额外的空格字符。

可以使用带有此内容流的 PDF 使用 重现该行为。 F0 正在 express :

BT
/F0 9 Tf
100 500 Td
( 2 Netto 5,00 EUR 3,00) Tj
0 0 Td
( 2882892 ENERGIZE LR6 Industrial 2,50 EUR 1) Tj
ET

在 PDF 查看器中,这看起来像这样:

Screenshot

从 Adob​​e Reader 复制和粘贴结果
2 2 8 8 2 8 9 2 E N E R G I Z E L R 6 I n d u s t r i a l 2 , 5 0 E U R 1 Netto 5,00 EUR 3,00

使用 PDFBox 进行常规提取会导致
             2    2 8 8 2 89 2    E N E RG  IZ  E  L R 6  I n du s t  ri  a l                      2 ,5  0  EU  R  1 Netto        5,00 EUR 3,00

因此,不仅 PDFBox 在这里有问题,这两个输出看起来不同,但额外的空格无论如何都是一个问题。

我建议告诉那些 PDF 的制作者,即使对于像 Adob​​e Reader 这样广泛使用的软件,它们也很难进行后期处理。

解决办法

为了从中提取一些合理的东西,我们必须以某种方式忽略(实际存在!)额外的空间。由于无法临时知道哪些空格可以稍后使用,哪些不能使用,我们只需删除所有空格并希望 PDFBox 在必要时添加空格:

String extractNoSpaces(PDDocument document) throws IOException
{
PDFTextStripper stripper = new PDFTextStripper()
{
@Override
protected void processTextPosition(TextPosition text)
{
String character = text.getCharacter();
if (character != null && character.trim().length() != 0)
super.processTextPosition(text);
}
};
stripper.setSortByPosition(true);
return stripper.getText(document);
}

( ExtractWithoutExtraSpaces.java )

将此方法与测试文档一起使用,我们得到:
2 2882892 ENERGIZE LR6 Industrial 2,50 EUR 1 Netto 5,00 EUR 3,00

不同的文本提取器

The alternative libary 'iText' extract the text correctly without spaces between the characters



这是因为 iText 是逐个字符串提取文本,而不是逐个字符。这个过程有其自身的危险,但在这种情况下会导致一些更有用的开箱即用。

关于pdfbox - Apache PDFBox 删除字符之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29554400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com