我正在使用PdfTextStripper(PDFBox 1.8.2)来处理pdf文件中的每个TextPosition。我已经测试了很多文件,我注意到它按阅读顺序处理文本。但是,如果pdf有页脚(我作为pdf导出的docx),这不是很好。 pdfTextStripper首先处理页脚,然后处理文件的主体。
这是预期的行为吗?有没有办法指定订单?或者有什么方法可以识别它的页脚,我可以在我的代码中进行调整吗?
答案 0 :(得分:3)
PdfTextStripper
有一个属性 SortByPosition (getSortByPosition
& setSortByPosition
)。默认为false
。
如果此属性为false,
,则PdfTextStripper
实际上会按照PDF页面内容流中显示的顺序提取文字。
此订单可能完全被破坏(因为在内容流中您使用的操作符可以将下一个打印文本放在页面的任何位置)但是通常将属于一起的文本部分保持在一起(因为这些部分所需的操作通常会被插入在那个流中作为块)。
但是,页眉和页脚通常会同时添加,因此会在主体文本之前或之后一起显示。
如果此属性为true,
,则PdfTextStripper
实际上从左到右从上到下提取文本(除非读取顺序定义为从右到左)。 (好吧,好吧,它也尊重文章珠子,但你几乎不能指望它们被普遍使用。)
这个顺序在单列文本的情况下是好的,标题首先出现,页脚最后,但除非使用正确的文章标题,否则多列页面会被破坏。
顺便说一句,您可以使用属性ShouldSeparateByBeads
(getSeparateByBeads
& setShouldSeparateByBeads
)关闭文章珠子的使用。