トラストバンクといったら「ふるさとチョイス」が代名詞ではあるのですが、「ふるさとチョイス」以外にもいくつか事業を展開しております。
その1つに自治体専用ツール(LoGoチャット、LoGoフォーム)の開発・提供をしている事業部があります。
自治体専用ビジネスチャットツール「LoGoチャット」
https://publitech.fun/service_logochat
自治体専用WEBフォーム作成ツール「LoGoフォーム」
https://publitech.fun/service_logoform
今回は、このLoGoフォームで使われている「PDF作成機能」についてご紹介させていただきます
準備
とりあえず試したい方向けのDockerfile。これでPythonの環境ができあがり
FROM python:3.8.12-bullseye
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install -y pdfrw reportlab
WORKDIR /opt
PDFに文字を書き出す
文字の書き出し
元のPDFファイルとなる「sample.pdf(A4縦)」を用意してください
from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import portrait, landscape, A3, A4, A5, A6, B3, B4, B5, B6
def make_pdf():
file_in = './sample.pdf'
file_out = './sample_out.pdf'
# 元のPDFを読み込み
pages = PdfReader(file_in, decompress=False).pages
# キャンバスのセット
cc = canvas.Canvas(file_out, pagesize=portrait(A4))
# ページ取得
pp = pagexobj(pages[0])
cc.doForm(makerl(cc, pp))
# 文字書き出し
cc.drawString(x=20, y=10, text='aaa')
cc.showPage()
cc.save()
これでPDFに文字が書き足されます!(左下にコッソリとw)
というのもこの「pdfrw」を使ったときの起点は 左下 になります
ですので表示したい位置を左下から計る必要があります
pdfrw で書き出すときの起点は左下
指定位置への書き出し
書き出せたところで次は指定の位置に書き出してみたい
適当にx,yの引数を試して目的の場所に当たりをつけていくのでもいいですが、おおまかな位置だけでも測ってから微調整としたいところ
位置の測り方
今回は無料のAcrobat Reader DC でのやり方
指定位置への書き出し
さきほどのソースの書き出し部分をこちらに変更
from reportlab.lib.units import mm
cc.drawString(x=19.97*mm, y=21.55*mm, text='aaa')
drawString
のx,yはpx
での指定になるため「ものさし」で出てくるmm
では単位があわない
そんなときは、reportlab
に用意されている mm
を使用
上記のように ミリメートルの値に mm
を乗算することでの指定が可能になる
出力結果はこちら
drawString の引数(位置指定)は px(ピクセル)
指定の位置に文字が書けたらあとはこんなこともできるよという紹介を
文字の中央揃え、右揃え
中央揃え、右揃えで書き出すことが可能です
# 通常の左揃え(指定した位置から右に文字が記載される)
cc.drawString(x=40.00*mm, y=24.55*mm, text='aaa')
# 中央揃え(指定した位置を中心に左右に文字が記載される)
cc.drawCentredString(x=40.00*mm, y=24.55*mm, text='bbb')
# 右揃え(指定した位置から左に文字が記載される)
cc.drawRightString(x=40.00*mm, y=24.55*mm, text='ccc')
文字の色を変える
出力する文字の色をかえることも可能です
from reportlab.lib.colors import HexColor
cc.setFillColor(HexColor('#FF0000')) # RRGGBB で指定
cc.drawString(x=40.00*mm, y=24.55*mm, text='aaa')
PDFに画像を出力
画像の書き出しも可能で、このように書きます
image_path = './logo.png'
cc.drawImage(image=image_path, x=23.00*mm, y=245.00*mm, width=50*mm, height=50*mm, mask='auto')
ぜひいろいろと試してみてください