gpt4 book ai didi

java - Android Studio 上的 PDFBox 文本提取连字 "fi"、 "fl"问题

转载 作者:行者123 更新时间:2023-12-01 14:10:22 25 4
gpt4 key购买 nike

我正在使用这个 https://github.com/TomRoush/PdfBox-Android Android Studio 库上的 PDFBox,用于从 PDF 文档中提取文本。这是我正在做的:

File pdf_file = new File(file_path);

创建文件,然后

PDDocument document = null;
document = PDDocument.load(pdf_file);

将文件加载到 PDDocument 对象中,然后

PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setStartPage(...);
pdfStripper.setEndPage(...);
String page_text = pdfStripper.getText(document);

获取页面的文本内容。问题是,当有例如“firm”这个词时,它会显示为“fi rm”。它基本上在 fi 之后放置一个空格(我猜是 fls 和其他连字)。我试着读这个 Problems with extracting OpenTypeFont text using pdfBox但我不明白如何解决它。没有解决方案的详细信息。

重要提示:事实证明,在我的 PDF 文件中,我没有任何连字,例如 fi,但我有常规的 fi,但它后面有空格。解决方案尚不清楚。

PDF 文件:https://wetransfer.com/downloads/09e9036dda4a7962ccad32b1cbcd8edc20200506050349/ab4752

最佳答案

The issue is that when there's for example the word "firm" it displays it like "fi rm".

原因很简单:“fi”后面有一个空格!

这是绘制示例文件中第一次出现“公司”的线条的文本绘制指令:

 [( )360.3(Mr Dursley was the director of a “)250( )110.3(rm called Grunnings, )]TJ

字节 (147) 通过字体编码映射到字形名称 fi 并通过 ToUnicode 映射字体转换为 Unicode 字符 U+fb01,拉丁小连字 fi。

因此,PDF 查看器显示连字字形 fi,文本提取器提取 Unicode 连字字符 fi 或扩展后的字符 f

在连字之后,绘制下一个字形的起点向左移动 250 个单位,然后绘制一个空格,然后下一个起点向左移动 110.3 个单位,然后绘制“rm”。

因此,您在查看器中看不到“fi”和“rm”之间的间隙(因为向左移动会抵消空格字形的绘制),但文本提取器会提取空格字符(因为它在那里) .

您可以检查这不是 PDFBox 怪癖,例如带有复制和粘贴功能的 Adob​​e Reader 将该文本行提取为

Mr Dursley was the director of a fi rm called Grunnings,

就像 PDFBox 一样,它扩展连字并提取空格字符。

关于java - Android Studio 上的 PDFBox 文本提取连字 "fi"、 "fl"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61620666/

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