使用PDFBox 2.x从PDF提取文本时合并行的问题

时间:2019-01-14 18:45:00

标签: java pdfbox

我在使用PDFTextStripper中的PDFBox 2.0.13从PDF提取文本时遇到问题。更具体地说-彼此太近的线合并在一起。例如: enter image description here

第一行上显示文本“ signfieldbig ”,第二行包含下划线,但PDFTextStripper将其解析为“ s_i_g_n_fi_e_ld_b_ig_ _______ ”(合并这两行合为一体)。我尝试了多种设置(不同的lineSeparator,阈值等),但没有任何帮助。这两行每次都合并,我不能简单地从文本中删除所有不必要的字符,因为我正在寻找此占位符的位置以创建签名字段。

更新:我刚刚意识到了导致此问题的原因-在原始文件中,不是两行被行分隔符分隔的正常行,而是一行带有下划线,并在其上方手动放置了带有文本“ placeholder ”的文本区域。但是,PDF查看器(以文本形式查看)或其他PDF库(iText 2.x)仍将其解析为两行...

1 个答案:

答案 0 :(得分:3)

有多种不同的文本提取策略,一种是要么在文本块出现时就对其进行处理,然后仅添加新行,或者在下一个新块的坐标不紧接上一个块时添加类似内容,或者可以收集所有块,按坐标对它们进行排序,然后从这些已排序的块中提取文本。

(显然,两种策略类型都可以与某种程度的文本布局分析结合使用。)

在您的情况下,排序是活动的,导致下划线和上面的文本作为“ s_i_g_n_fi_e_ld_b_ig_ _______”连接在一起。

您可以使用setSortByPosition(false)在pdfbox文本剥离器中禁用排序。


没有通用的最佳方法,这取决于所讨论的文档可能更好。