PDF文書にスタンプ角印的な印影を埋め込みたい
「請求書等のPDF文書に印影っぽいものがほしい」 という要望がありました。個人的には、形だけで意味があるとは思えない作業なのですが、
取引先から要望を受けた場合は、対応せざるを得ません。
その場合はAdobe Acrobatのスタンプ機能を利用したり、
スタンプ印を押した文書をスキャンしてpdfにしていました。
ただ、これでは対象文書数が多いときに面倒です。
そこでPythonを使って印影画像を埋め込もうと考えました。
準備
・glob,pdfrw,pillowをインストール ・pythonファイルと同階層に「pdf」フォルダ、その直下に「export」フォルダを作成 ・「pdf」フォルダに印影画像を埋め込みたいpdfファイルを保存 ・印影データ(透過png)を「pdf」フォルダ直下に保存 ![hanko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565780/27c8753b-0d07-0744-c128-b7e1e3c3daad.png)必要なモジュールをインポート
```py import glob import os from pdfrw import PdfReader from pdfrw.buildxobj import pagexobj from pdfrw.toreportlab import makerl from reportlab.pdfgen import canvas from PIL import Image import io from reportlab.lib.utils import ImageReader ```処理対象のフォルダやファイルを指定
```py # 処理対象のフォルダを指定 target_folder = os.getcwd() + r'\pdf' files = glob.glob(target_folder + r'\*.pdf')埋め込む画像を指定
img = ImageReader(os.getcwd() + r'\pdf\hanko.png')
<h2>画像を埋め込んで保存する</h2>
「pdf」フォルダ直下に入っているpdfファイルを順番に開き、
そこに印影画像を埋め込んで保存していきます。
画像の位置の起点は、左上ではなく左下なのでそれを踏まえて位置を指定します。
また、mask='auto'にしておかないと透過がうまくいかないようです。
```py
for file in files:
export_filename = target_folder + '\\export\\' + os.path.basename(file)
export_pdf = canvas.Canvas(export_filename)
# 対象PDFの1ページ目にのみ画像を埋め込む
target_pdf = PdfReader(file,decompress=False).pages
page = pagexobj(target_pdf[0])
export_pdf.doForm(makerl(export_pdf,page))
# ページの左下を起点にして、x=480,y=640 の位置にサイズx=60,y=60 で画像を埋め込む
export_pdf.drawImage(img, 480, 640, 60, 60, preserveAspectRatio=True, mask='auto')
export_pdf.showPage()
export_pdf.save()
処理結果
これがこうなりました