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

Problem with merged lines while extracting text from PDF using PDFBox 2.x

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

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

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

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

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

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

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


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