ryotankの備考録日記

趣味の電子工作についての備考録などなど

基板作りチェックリストその21

既存PDFに日本語のテキストを書き込む
フローチャートに従ってpdfを生成したいところだが、

初期段階として基板作りチェックリスト読み込み用の
PDFを読み込ませて様子見をしてみる

f:id:ryotank:20211228210407p:plain
PDF生成関数その2

無事に読み込みが出来ればフローチャート通りに
コード組んでいく

読み込ませるpdf(計3ページ分)

f:id:ryotank:20211228210455p:plain
読み込ませるPDF1ページ目
f:id:ryotank:20211228210548p:plain
読み込ませるPDF2ページ目
f:id:ryotank:20211228210613p:plain
読み込ませるPDF3ページ目
#既存のPDFを読み込ませる動作確認

from PyPDF2 import PdfFireWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait
from reportlab.lib.units import inch, mm, cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont

#ファイルの指定
template_file = './チェックリストPDF読み込み.pdf'  #既存のテンプレートPDF
output_file = './output.pdf'  #完成したPDFの保存先
tmp_file = './tmp.pdf'   #一時ファイル

#A4縦のCanvasを作成-------(1)
w, h = portrait(A4)
cv = canvas.Canvas(tmp_file, pagesize=(w, h))

#フォントを登録しCanvasに設定する----(2)
font_size = 16
ttf_file = './ipaexg.ttf'
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5', ttf_file)
cv.setFont('HeiseiKakuGo-W5', font_size)

#文字列を描画する--------(3)
cv.setFillColorRGB(0, 0, 0.4)
cv.drawString(70*mm, h-20*mm, "既存PDF読み込みテスト")

#一時ファイルに保存-------(4)
cv.showPage()
cv.save()

#テンプレートとなるPDFを読み込む----(5)
template_pdf = PdfFileReader(template_file)
template_page = template_pdf.getPege(0)

#一時ファイルを読んで合成する-----(6)
tmp_pdf =PdfFileReader(tmp_file)
template_page.mergePage(tmp_pdf.getPage(0))

#書き込み先PDFを用意する--------(7)
output = PdfFileWriter()
output.addPage(template_page)
with open(output_file, "wb") as fp:
	output.write(fp)

出来たのがこれ
読み込ませたpdfにテキスト文字を描画したもの

f:id:ryotank:20211228210705p:plain
既存PDFを読み込み、テキスト文字を描画したPDF

なぜか文字が縦書きになった。。。??

これを横書きに直さないと厳しい

次回はテキストを横書きに直すコードを完成させたい