非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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

 

 

スポンサーリンク

 - Python