0

我在ubuntu上。

我有一个 pdf 文件,页面分为网格。网格的每个块都包含候选人的姓名/年龄/出生日期/照片。有些记录有水印“不合格”

我需要刮掉他的 pdf,将不合格的候选人列在一个单独的列表中。使用 pyPdf 我能够获得个人记录,但它也包括带水印的候选者。

如何检测水印?如果我可以得到水印的坐标,我如何将它与候选人匹配?

我对 python pyPdf 以外的解决方案持开放态度

4

1 回答 1

1

(实际上这不是一个答案,而只是一个分析以供评论。)

我自己不知道 pyPdf(或任何 python PDF 类),但这是为示例条目创建水印的方式;基于此,任何足够了解 pyPDF 的人都可以更轻松地提出建议。

综述

根据 pyPDF(或其他 python PDF 类)如何允许访问页面内容,有两种主要的基本方法:

  1. 如果该类按其在页面内容流中的顺序返回有关内容(文本和图像)的信息:水印图像 xobject 在条目数据之前被引用。因此,在绘制 xobject 图像之前的任何条目都会被标记。

  2. 如果否则信息没有按照页面内容流指示的顺序给出,则必须使用坐标比较,这本身是非常直接的。在这种情况下,可能会感兴趣的是图像插入时使用 [0.1 0 0 0.1 0 0] 变换矩阵,而文本是使用单位变换矩阵绘制的。

细节

这是条目#200;另一个带水印的条目的构造类似:

带有 DELETED 水印的数据集 200

水印是通过图像 xobject 完成的。两个水印条目使用的页面只定义了一个图像 xobject:

4 0 obj
<</Type/Page/MediaBox [0 0 595 841]
/Rotate 0/Parent 3 0 R
/Resources<</ProcSet[/PDF /ImageC /ImageI /Text]
    /ColorSpace 18 0 R
    /ExtGState 19 0 R
    /XObject 20 0 R
    /Font 21 0 R
    >>
/Contents 5 0 R
>>
endobj 
20 0 obj
<</R17
17 0 R>>
endobj
17 0 obj
<</Subtype/Image
/ColorSpace 16 0 R
/Width 128
/Height 88
/BitsPerComponent 8
/Filter/FlateDecode/Length 463>>stream 
[...]
endstream
endobj 

在内容流中,这个 xobject /R17在条目本身的数据被绘制之前插入:

q 0.1 0 0 0.1 0 0 cm
[...]
q 1045 0 0 495 462.5 6510.5 cm
/R17 Do
Q
q
10 0 0 10 0 0 cm BT
0.000487366 Tc
/R10 8 Tf
1 0 0 1 86 650.75 Tm
(Sex : Male)Tj
0.000304794 Tc
-64 0 Td
(Age : 43)Tj
-0.000140686 Tc
-1 11.05 Td
(House No :)Tj
-0.00002085 Tc
1 31.95 Td
(Name :)Tj
0.00008575 Tc
/R12 7.15 Tf
25.5 17.8 Td
( 200 )Tj
ET
Q
1547.5 6475 485 535.5 re
S
q
10 0 0 10 0 0 cm BT
-0.000403137 Tc
/R14 8 Tf
1 0 0 1 145.1 708.5 Tm
(XVX0001081)Tj
0.000421651 Tc
/R14 7.05 Tf
-90.35 -14.95 Td
(Ramesh Kumar)Tj
0.000373332 Tc
/R10 7.05 Tf
-33 -12.75 Td
(Father's )Tj
0.000193787 Tc
7.3 TL
(Name)'
0.00037774 Tc
/R14 7.05 Tf
40.25 1.8 Td
(Ram Singh)Tj
0 Tc
2.5 -11.85 Td
(37)Tj
0.00137196 Tc
/R12 7.15 Tf
-5.25 13.35 Td
(:)Tj
于 2013-06-13T07:44:32.300 回答