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

标签 java pdfbox

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

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

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

最佳答案

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

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

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

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


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

关于java - 使用 PDFBox 2.x 从 PDF 中提取文本时出现合并行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54187398/

相关文章:

java - Ajax中获取Action方法结果状态

java - JMenu 在绘制图像的 JPanel 上方留下一个灰色框

java - 通过页面搜索已使用的资源并将其删除

java - 发布表单时来自tomcat的意外结果

java - 当进度条达到 0 时打开新的 JFrame?

java - 从 String 数组到 ArrayList 转换的性能相关

java - 将PDF复制到新的PDF,但没有文档的某些位

pdf-generation - 使用 PDFBox 生成的 PDF 为空白

java - 是否有一些更好的方法来使用 PdfStripper 转换 pdf 的字节数组?

java - 使用 OCR 检测扫描文档是否创建 PDF [pdfbox]