見出し画像

【python3】PDFを作ってみる

「文章入れたら段組してPDFにしてくれるやつ」がほしいので作っていこうと思います。
最終的にはどこで動かそうかなぁ…………

プラグインのインストール

$ pip install reportlab

pythonでPDFを作るプラグインは色々あるようですが、とりあえず有名どころっぽいのを。老舗プラグインだそうですが、2023年10月現在、2023年6月に最新版がリリースされていることを確認しています。

とりあえず空のPDFファイルを作成してみる


from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import A4, portrait

# ファイルの出力先フォルダとファイル名を指定
file_path = "C:\\Users\\user\\Document\\hoge.pdf"

# PDFを作成
page = Canvas(file_path, pagesize=portrait(A4))
page.save()

これだけでとりあえず空のPDFが出力されます。
空なのでAcrobatなどのリーダーではエラーになって開けませんが、ファイルが作成されることは確認できました。

とりあえず一行出力してみる

こちらの記事を参考に……

from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import A4, portrait

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm

# ファイルの出力先フォルダとファイル名を指定
file_path = "C:\\Users\\user\\Document\\hoge.pdf"

# PDFを作成
page = Canvas(file_path, pagesize=portrait(A4))

# フォントを使えるようにする
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3'))

# 書体とサイズを指定する
page.setFont('HeiseiMin-W3', 24*mm)

# 出力するテキストを整形する
page.drawString(30*mm, 100*mm, "TEST")

# 保存
page.save()

これで、「TEST」というテキストが挿入されたA4のPDFが作成されました。
位置を適当にしたので凄い変な所にありますがまあとりあえずなので。

上記のコードで作成したPDFを開いたところ

今回、フォントは最初からreportlabにバンドルされている明朝体を使用しています。
それが割と可愛い感じなので今回はこのまま使いますが、権利をクリアにできたフォントファイルがあれば好きなフォントを使うことも可能なようです。(上記の記事に詳しいです)

これでひとまずPDFは作れるようになりました。

縦書きのテキストを出力する

上記の「フォントを使えるようにする」の所の

pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3'))

の引数に、isVertical=Trueを与えて上げると縦書きになるそうです。

pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3', isVertical=True))

そのままで実行してみたら文字の座標がおかしかったらしくてどこか行ったので、座標とフォントサイズをちょっと調整して

page = Canvas(file_path, pagesize=portrait(A4))
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3', isVertical=True))
page.setFont('HeiseiMin-W3', 10*mm)
page.drawString(100*mm, 100*mm, "これはテストです")
page.save()

で、こう

なんとか用紙の中にテキストが押し込めたという感じのPDF

とりあえず今回はここまでで……
あとは自動改行と段組が出来るようになりたい。

この記事が気に入ったらサポートをしてみませんか?