以正确的视觉顺序从 PDF 中提取文本

问题描述 投票:0回答:1

使用 Python 库从 PDF 中提取文本时,所选文本的顺序与您在屏幕上看到的顺序不匹配?例如,当我在页面顶部复制一些文本,然后复制表格,最后复制一些文本,但是当您粘贴时,所有内容都会以不同的顺序显示。即使在检查布局字典时,提取的文本也会保留这种意外的顺序。为什么会出现这种差异,可以采取哪些步骤来解决?

我尝试使用排序,甚至尝试按自然阅读顺序排列文本,但在将此方法应用于具有两列布局的 PDF 时遇到了麻烦。具体来说,如果 PDF 遵循列布局,我想逐列提取文本。顺便说一句,我正在处理从各种复杂布局中提取文本。但是,当我使用排序时,我遇到了具有多列的布局问题。我正在寻找一种解决方案来解决文本换行、编码或导致问题的任何其他问题。

python pdf text-extraction pdftotext pymupdf
1个回答
0
投票

PDF 中的布局有时是逐个字母(幸运的是经常)这些字母可以是块中的整行(并不总是作为单词组)。

因此,如果我们打印此页,则该问题第一行打印可能是:

“使用 Python 库从 PDF 中提取文本时,所选文本的顺序不匹配”

或 “同时)-50(使用)-50(a)-50(Python)-50(l)1(i)1(b)1(r)1(a)1(r)1
(y)”等

因此 Abracadabra 可以写成如下所示。

但是在 PDF 中,您提取的内容可能会像这样组成。

BT
40 TL /1 18 Tf 1 0 0 1 15 800 Tm T*
(PlainText = http://foersom.com/net/HowTo/data/OoPdfFormExample.pdf) Tj
/1 16 Tf T* (12  letters.) Tj 20 TL T* (9) Tj 1 0 0 1 42 720 Tm T* (letters.) Tj
1 0 0 1 15 700 Tm T* (A) Tj 1 0 0 1 40 700 Tm T* (a) Tj 1 0 0 1 57 700 Tm T* (a) Tj 1 0 0 1 75 700 Tm T* (a) Tj 1 0 0 1 98 700 Tm T* (a) Tj
1 0 0 1 26 700 Tm T* (b) Tj 1 0 0 1 84 700 Tm T* (b) Tj 
1 0 0 1 49 700 Tm T* (c) Tj
1 0 0 1 66 700 Tm T* (d) Tj
1 0 0 1 92.5 700 Tm T* (r) Tj 1 0 0 1 34.5 700 Tm T* (r) Tj 40 TL T*
(goto page in another PDF) Tj 20 TL T*
(Also plain text = https://pdfobject.com/pdf/sample-3pp.pdf#page=2) Tj
25 TL /1 11 Tf 1 0 0 1 154.5 760 Tm T*
(Sign and Secure this file.txt as a PDF with Adobe Reader) Tj
1 0 0 1 149.5 695 Tm T*
(or click https://www.adobe.com/acrobat/online/sign-pdf.html) Tj
ET

因此,Apple 打印机中的激光束按此顺序刻录到鼓上没有问题,

A a a a a
b b
c
d
r r
© www.soinside.com 2019 - 2024. All rights reserved.