首页 文章

按列提取PDF文本

提问于
浏览
0

我的问题是:

如何从PDF文件中提取文本,该文件按列分割,我将结果由此列分隔?

背景:我从事一个关于文本分析(特别是科学文本)的项目 . 这些文本有时以多个列布局发布,每列给出一个单独的页码 . 要通过有层次的页面编号对所提取的文本进行排序,按列提取文本会很有用 .


我使用 pdfBox 并尝试/搜索了几件事:

  • 我尝试了 PDPage 类的 getThreadBeads() 方法 - >结果:列表0大小

  • 我尝试用 getCharactersByArticle() 方法抓取文本 - >文本不分列
    (我尝试使用已发布文本的pdf文件以及基于自创的.doc文件,每个文件都有多列布局)

问题是pdfBox似乎自动按列分割文本:如果我将 setSortByPosition() 设置为 PDFTextStripper ,则页面的所有符号都设置在一行而不识别单独的列 . 但是,如果我将 setSortByPosition() 设置为false,则剥离器正在进行此分割 .

为此我查看了pdfBox源代码:关键方法是PDFTextStripper的 writePage() 方法 . 这里显然计算了空间(在大多数pdf中没有给出)和换行符 . 但我无法找到Stripper如何计算柱断裂 .

那么问题又来了:

  • PDFTextStripper如何计算列中断?

  • pdfBox API中是否有方法来捕获/按列提取文本?

  • 这可能与其他pdf-api一起使用吗?

提前致谢

1 回答

  • 2

    如果我将PDFTextStripper的setSortByPosition()设置为true,则页面的所有符号都会在一行中设置,而不会识别单独的列 . 但是如果我在false上设置setSortByPosition(),那么剥离器正在进行这种划分 . [...] PDFTextStripper如何计算列中断?

    事实并非如此 .

    通过将 SortByPosition 设置为 false ,您告诉PDFBox不要尝试从页面内容流中对文本片段进行排序,而是按照它们出现的顺序接受它们 .

    在您的文档中,文本片段似乎是按阅读顺序绘制的,即逐列 . 对于所有文档都不是这样,并且为了处理其他文档,PDFBox提供了从左到右,从上到下排序文本片段的选项 .

    在文档中激活该选项(将 SortByPosition 设置为 true )将返回不考虑列的文本 .

    pdfBox API中是否有方法来捕获/按列提取文本?

    PDFBox不会分析页面内容以识别列 . 但是,如果进行分析,则允许您逐列提取文本,如果您将列矩形作为规则提供 .

相关问题