【问题标题】:PDFBox- is the reading order guaranteed with PDFTextStripper's processTextPosition ?PDFBox- PDFTextStripper 的 processTextPosition 是否保证阅读顺序?
【发布时间】:2013-07-19 08:20:14
【问题描述】:

我正在使用 PdfTextStripper (PDFBox 1.8.2) 来处理 pdf 文件中的每个 TextPosition。我已经测试了很多文件,我注意到它按阅读顺序处理文本。但是,如果 pdf 有页脚(我导出为 pdf 的 docx),这并不适用。 pdfTextStripper 先处理页脚,然后处理文件正文。

这是预期的行为吗?有没有办法可以指定订单?或者有什么方法可以识别它的页脚,我可以在我的代码中进行调整?

【问题讨论】:

    标签: pdf pdfbox text-extraction


    【解决方案1】:

    PdfTextStripper 有一个属性 SortByPosition (getSortByPosition & setSortByPosition)。默认为false

    如果此属性为false,PdfTextStripper 实质上是按照文本在 PDF 页面内容流中出现的顺序提取文本。

    这个顺序可能会被完全打乱(因为在内容流中,您使用的运算符可以将下一个打印文本放置在页面上的任何位置)但通常属于一起的文本部分会保持在一起(因为这些部分所需的操作通常会被插入在该流中作为一个块)。

    不过,页眉和页脚通常是同时添加的,因此会一起出现在正文之前或之后。

    如果这个属性是true,PdfTextStripper 本质上是从上到下,从左到右提取文本(除非阅读顺序被定义为从右到左)。 (好吧,好吧,它也尊重文章珠,但你几乎不能指望它们被普遍使用。)

    这种顺序适用于单列文本,页眉在前,页脚在后,但除非使用正确的文章珠,否则多列页面会被弄乱。

    顺便说一句,您可以使用属性ShouldSeparateByBeads (getSeparateByBeads & setShouldSeparateByBeads) 关闭文章珠子的使用。

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多