首页 > 解决方案 > 使用 PDFBox 2.x 从 PDF 中提取文本时出现合并行的问题

问题描述

我在使用PDFTextStripperfrom从 PDF 中提取文本时遇到问题PDFBox 2.0.13。更具体地说 - 彼此太接近的线被合并在一起。例如: 在此处输入图像描述

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

更新:我刚刚意识到是什么导致了这个问题 - 在原始文件中,不是由行分隔符分隔的两条普通行,而是一条带下划线的行,并在其上方手动放置带有文本“占位符”的文本区域。但是,PDF 查看器(将其作为文本查看)或其他 PDF 库(iText 2.x)将其解析为两个单独的行......

标签: javapdfbox

解决方案


文本提取有不同的策略,一个可以获取文本块,当新的下一个块的坐标不在前一个之后时只添加一个新行或类似的东西,或者可以收集所有块,对它们进行排序通过坐标,并从这些排序的块中提取文本。

(显然这两种策略类型都可以结合一定程度的文本布局分析。)

在您的情况下,排序处于活动状态,导致下划线和上面的文本连接为“s_i_g_n_fi_e_ld_b_ig_ _______”。

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


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


推荐阅读