首页 > 解决方案 > pdfbox 以什么顺序解析 pdf 文件?(假设一页多于 1 列)

问题描述

如果 pdf 文件的页面上有 2 列,pdfbox 是逐列还是逐行解析它?

标签: javaapache-poipdfbox

解决方案


当您说“解析 PDF 文件”时,我假设您的意思是对其应用文本提取。在 PDFBox 的情况下,通常是通过PDFTextStripper类来实现的。

在这种情况下,答案是“视情况而定”。

  • 默认情况下,PDFTextStripper按内容流中文本绘制指令的顺序提取。这通常对应于内容的逻辑顺序,因为 PDF 生成器通常具有按该顺序排列的输入并相应地生成输出,例如,通常会按列提取多列。

    但是不能保证这一点;文字绘图指令理论上可以是任何顺序;例如,首先可以绘制页面上的所有 'a',然后绘制所有 'b',...

    这样的混乱是非常罕见的。但是,如果 PDF 的内容既包含固定内容又包含动态内容,您可能经常首先看到固定内容,然后是提取文本中的动态内容。例如第一个标签,如“名字”、“姓氏”、“出生日期”……然后是值。

  • 或者,您可以使用PDFTextStripper.setSortByPositionSortByPosition属性设置为true。在这种情况下,PDFBox 会忽略绘图顺序并尝试逐行提取 PDF 文本。


推荐阅读