【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ファイルです。ちゃんと画像とテキストとが一緒に追加されています。
スポンサーリンク