【Python】日本語テキストと画像を含むPDFを作成する
Pythonのreportlabライブラリを使用して、日本語テキストと画像を含むPDFを作成する方法を紹介します。本記事では、PILを使って画像サイズを取得し、縦横比を維持したままPDFに画像を追加する方法も解説します。
必要なライブラリのインストール
まず、必要なライブラリをインストールします。
$ pip install reportlab pillow
日本語フォントの登録
reportlabではデフォルトで日本語フォントがサポートされていないため、フォントを登録する必要があります。以下のコードでは、Windowsの「Meiryo」フォントを登録しています。フォントパスは環境に応じて適宜変更してください。
rom reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
pdfmetrics.registerFont(TTFont("meiryo", "/home/ueserver/.fonts/meiryo.ttc"))
PDFの作成と画像の追加(Pythonプログラム)
以下のコードは、reportlabを使ってA4サイズのPDFを作成し、日本語テキストと画像を追加するものです。
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from PIL import Image # 画像サイズ取得用
# 日本語フォントを登録(フォントパスを指定)
pdfmetrics.registerFont(TTFont("meiryo", "/home/ueserver/.fonts/meiryo.ttc"))
# PDFを作成
pdf_filename = "sample.pdf"
c = canvas.Canvas(pdf_filename, pagesize=A4)
# 画像を追加
image_path = "image.jpg" # 画像ファイルのパス
# 画像の元のサイズを取得
with Image.open(image_path) as img:
orig_width, orig_height = img.size # 元の画像の幅と高さ
# 描画領域の幅を指定
max_width = 400
# 縦横比を維持して高さを計算
aspect_ratio = orig_height / orig_width
new_width = max_width
new_height = max_width * aspect_ratio # 高さを計算
# 画像を追加(縦横比を維持)
c.drawImage(image_path, 100, 800 - new_height, width=new_width, height=new_height, preserveAspectRatio=True, anchor='sw')
# テキストを追加
c.setFont("meiryo", 11)
c.drawString(100, 500, "これはサンプルのPDFです。")
c.drawString(100, 485, "これはサンプルのPDFです。(2行目)")
# PDFを保存
c.showPage()
c.save()
print(f"PDF '{pdf_filename}' を作成しました。")
実行して生成されたPDFファイル
こちらが生成されたPDFファイルです。ちゃんと画像とテキストとが一緒に追加されています。
スポンサーリンク
