我在使用PDFTextStripper
中的PDFBox 2.0.13
从PDF提取文本时遇到问题。更具体地说-彼此太近的线合并在一起。例如:
第一行上显示文本“ signfieldbig ”,第二行包含下划线,但PDFTextStripper
将其解析为“ s_i_g_n_fi_e_ld_b_ig_ _______ ”(合并这两行合为一体)。我尝试了多种设置(不同的lineSeparator,阈值等),但没有任何帮助。这两行每次都合并,我不能简单地从文本中删除所有不必要的字符,因为我正在寻找此占位符的位置以创建签名字段。
更新:我刚刚意识到了导致此问题的原因-在原始文件中,不是两行被行分隔符分隔的正常行,而是一行带有下划线,并在其上方手动放置了带有文本“ placeholder ”的文本区域。但是,PDF查看器(以文本形式查看)或其他PDF库(iText 2.x)仍将其解析为两行...
答案 0 :(得分:3)
有多种不同的文本提取策略,一种是要么在文本块出现时就对其进行处理,然后仅添加新行,或者在下一个新块的坐标不紧接上一个块时添加类似内容,或者可以收集所有块,按坐标对它们进行排序,然后从这些已排序的块中提取文本。
(显然,两种策略类型都可以与某种程度的文本布局分析结合使用。)
在您的情况下,排序是活动的,导致下划线和上面的文本作为“ s_i_g_n_fi_e_ld_b_ig_ _______”连接在一起。
您可以使用setSortByPosition(false)
在pdfbox文本剥离器中禁用排序。
没有通用的最佳方法,这取决于所讨论的文档可能更好。