(実際、これは回答ではなく、コメントを求めるための単なる分析です。)
私自身はpyPdf(またはpython PDFクラス)を知りませんが、サンプルエントリの透かしを作成する方法は次のとおりです。これに基づいて、pyPDFを十分に知っている人なら誰でも簡単にアドバイスできます。
ラウンドアップ
pyPDF (または他の python PDF クラス) がページ コンテンツへのアクセスを許可する方法に応じて、2 つの主要な基本的な方法があります。
クラスがページ コンテンツ ストリーム内の順序でコンテンツ (テキストと画像) に関する情報を返す場合: エントリのデータの直前に透かし画像 xobject が参照されます。したがって、xobject 画像の描画が先行するすべてのエントリがマークされます。
そうでなければ、情報がページ コンテンツ ストリームによって示される順序で提供されない場合、座標比較を使用する必要があります。その場合、画像が [0.1 0 0 0.1 0 0] 変換行列を使用して挿入され、テキストが恒等変換行列で描画されると興味深いかもしれません。
詳細
これはエントリ # 200 です。透かし入りのもう 1 つのエントリも同様に作成されます。
透かしは、画像の xobject によって行われます。透かし入りの両方のエントリで使用されるページに定義されている画像 xobject は 1 つだけです。
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