Pythonを使って請求書や報告書、分析レポートなどをPDFで自動作成できたら、業務がぐっと楽になりますよね。
そんなときに活躍するのが、PythonのPDF生成ライブラリ「ReportLab」です。
ReportLabは非常に多機能で、テキストはもちろん、図形や画像、表などを自由自在に配置した高品質なPDFを作成できます。
この記事では、ReportLabのインストール方法といった基本的な内容から、多くの人がつまずきがちな日本語の文字化け対策、さらには図や表を挿入する応用的な使い方まで、サンプルコードを交えながら分かりやすく解説します。
ReportLabとは?PythonでPDFを自由自在に操るライブラリ
ReportLabは、PythonでPDFドキュメントを動的に生成するためのオープンソースライブラリです。
世界中で広く利用されており、帳票作成からグラフィカルなレポート生成まで、非常に幅広い用途に対応できるのが大きな強みです。
具体的には、以下のようなことができます。
- テキストの描画(フォント、サイズ、色の指定)
- 線、四角形、円などの図形の描画
- 画像の挿入
- 複雑なレイアウトの表(テーブル)の作成
- グラフの描画
他のライブラリと比較して学習コストは少し高いかもしれませんが、その分、定型的なPDFだけでなく、デザイン性の高いドキュメントも作成できる自由度の高さが魅力です。
「こんなPDFを作りたい」という細かな要望に応えられる、まさにプロ向けのツールといえるでしょう。
ReportLabのインストールと環境構築
ReportLabを使い始めるのはとても簡単です。
Pythonのパッケージ管理ツールであるpipを使って、コマンドラインから以下のコマンドを実行するだけでインストールが完了します。
pip install reportlab
特定のプロジェクトで利用する場合は、他のライブラリとの競合を避けるために、仮想環境を構築してからインストールすることをおすすめします。
仮想環境を作成し、有効化してからインストールする手順は以下の通りです。
# 仮想環境を作成(myenvは好きな名前でOK)
python -m venv myenv
# 仮想環境を有効化
# Windowsの場合
myenv\Scripts\activate
# Mac/Linuxの場合
source myenv/bin/activate
# ReportLabをインストール
pip install reportlab
これで、ReportLabを使ってPDFを作成する準備が整いました。
とても簡単ですよね。
【基本編】ReportLabでPDFを作成する最初のステップ
インストールが完了したら、さっそく簡単なPDFファイルを作成してみましょう。
まずは「Hello, World!」と書かれたPDFを生成するコードです。
この最初のステップで、ReportLabがどのように動作するのか、基本的な概念を掴んでいきましょう。
以下のコードを「create_pdf.py」のような名前で保存して実行してみてください。
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch
# 1. Canvasオブジェクトの作成
# letterは用紙サイズ、(612, 792)ポイント
c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter # ページの幅と高さを取得
# 2. テキストを描画
# drawStringの引数は (x座標, y座標, テキスト)
# 座標の原点 (0, 0) はページの左下
c.drawString(1 * inch, height - 1 * inch, "Hello, World!")
# 3. PDFを保存
c.save()
print("hello.pdf を作成しました。")
このコードを実行すると、同じディレクトリに「hello.pdf」というファイルが生成されます。
コードのポイントは「Canvas(キャンバス)」という概念です。
ReportLabでは、まず白紙のPDF(キャンバス)を用意し、その上にdrawStringのようなメソッドを使ってテキストや図形を「描画」していくイメージでPDFを構築します。
座標の原点が一般的な左上ではなく「左下」である点に注意してください。
ReportLabの日本語対応:文字化けを防ぐ設定方法
ReportLabを使い始めた多くの人が直面するのが、日本語の文字化け問題です。
何も設定せずに日本語を描画しようとすると、文字が表示されなかったり、エラーになったりします。
これは、ReportLabの標準フォントに日本語が含まれていないために起こる現象です。
解決策はとてもシンプルで、「日本語フォントを登録し、それを指定してテキストを描画する」ことです。
ここでは、無料で利用できる「IPAexゴシック」フォントを使って日本語を表示させる手順を解説します。
まず、IPAフォントの公式サイトからフォントをダウンロードします。そして、ダウンロードしたフォントファイル(.ttf)を、これから作成するPythonスクリプトと同じフォルダに配置すると、パスの指定が簡単になるのでおすすめです。
次に、以下のコードでフォントを登録し、日本語を描画します。
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# 1. 日本語フォントを登録
# "ipaexg.ttf"はダウンロードしたフォントファイル名に合わせる
pdfmetrics.registerFont(TTFont('ipaexg', 'ipaexg.ttf'))
# Canvasオブジェクトを作成
c = canvas.Canvas("japanese_test.pdf", pagesize=A4)
width, height = A4
# 2. 登録したフォントを指定して描画
c.setFont('ipaexg', 24) # フォント名とサイズを指定
c.drawString(50, height - 100, "こんにちは、ReportLab!")
c.drawString(50, height - 200, "Pythonで日本語PDFを簡単作成。")
c.save()
print("japanese_test.pdf を作成しました。")
このコードの重要な点はpdfmetrics.registerFontの部分です。
ここで使いたいTrueTypeフォント(.ttf)のファイルパスと、プログラム上で使用するフォント名を紐付けています。
あとはsetFontメソッドで登録したフォント名を指定すれば、問題なく日本語が表示されるようになります。
【応用編】ReportLabでできること:図形・画像・表の挿入
テキストの描画ができるようになったら、次はもう少し複雑な要素を追加してみましょう。
ReportLabの真価は、図形や画像、表などを組み合わせたリッチなドキュメントを作成できる点にあります。
ここでは、代表的な3つの機能の使い方を解説します。
レポートや資料には、罫線や図形が欠かせません。
ReportLabには、直線、長方形、円、楕円などを描画するための便利なメソッドが用意されています。
座標を指定して、キャンバスに直接図形を描き加えていきます。
# ...(前述の日本語フォント登録などは省略)...
# 青い四角形を描画
c.setFillColorRGB(0.2, 0.5, 0.8) # 色を指定 (R, G, B)
c.rect(50, height - 400, 400, 200, fill=1) # (x, y, width, height)
# 赤い線を描画
c.setStrokeColorRGB(1, 0, 0) # 線の色を指定
c.setLineWidth(5) # 線の太さを指定
c.line(50, height - 450, 450, height - 450) # (x1, y1, x2, y2)
# 緑の円を描画
c.setFillColorRGB(0, 0.6, 0.2)
c.circle(150, height - 550, 50, fill=1) # (中心x, 中心y, 半径)
setFillColorRGBで塗りつぶしの色を、setStrokeColorRGBで線の色を指定できます。
rectやlineといった直感的なメソッド名で、簡単に図形を配置できるのが分かりますね。
会社のロゴや商品写真など、PDFに画像を入れたい場面は多いでしょう。
ReportLabではdrawImageメソッドを使って、簡単に画像を挿入できます。
ReportLabは画像の処理にPillowというライブラリを利用します。通常、ReportLabをインストールする際に依存関係として自動でインストールされますが、もし画像挿入時にエラーが出る場合は、以下のコマンドでPillowを個別にインストールしてみてください。
pip install Pillow
drawImageメソッドは、画像のファイルパスと配置したい座標を指定します。
画像のサイズを維持したまま挿入したり、幅と高さを指定してリサイズしたりすることも可能です。
from reportlab.lib.utils import ImageReader
# ...
# 画像を挿入 (元のアスペクト比を維持)
# "logo.png"は挿入したい画像ファイル
try:
c.drawImage("logo.png", 50, height - 600, width=100, preserveAspectRatio=True, mask='auto')
except:
c.drawString(50, height-600, "画像ファイルが見つかりません。")
画像の読み込みでエラーが発生する可能性も考慮し、try...except
ブロックで囲んでおくと、より安全なプログラムになります。
請求書の明細やレポートのデータなど、情報を整理して見せるには表が最適です。
ReportLabではTableオブジェクトを使って、柔軟な表作成が可能です。
二次元リスト(リストのリスト)でデータを用意し、Tableクラスに渡すだけで基本的な表が完成します。
from reportlab.platypus import Table, TableStyle
from reportlab.lib import colors
# ...
# 表のデータを作成
data = [
['商品名', '単価', '数量', '金額'],
['商品A', '1,000円', '2', '2,000円'],
['商品B', '1,500円', '1', '1,500円'],
['合計', '', '', '3,500円']
]
# Tableオブジェクトを作成
table = Table(data)
# 表のスタイルを設定
style = TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey), # 1行目の背景色
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), # 1行目の文字色
('ALIGN', (0, 0), (-1, -1), 'CENTER'), # 全体を中央揃え
('GRID', (0, 0), (-1, -1), 1, colors.black), # グリッド線
('FONTNAME', (0, 0), (-1, -1), 'ipaexg'), # 日本語フォントを指定
])
table.setStyle(style)
# 表を描画
table.wrapOn(c, width, height)
table.drawOn(c, 50, height - 300)
TableStyleを使うことで、セルの背景色や文字色、罫線、整列などを細かくカスタマイズできます。
日本語を含む場合は、忘れずにフォントを指定しましょう。
他のPython PDFライブラリとの比較
PythonにはReportLab以外にもPDFを操作するライブラリがいくつか存在します。
「自分の用途にはどれが一番合っているんだろう?」と迷う方のために、代表的なライブラリとの違いを比較表にまとめました。
なお、PDFの加工ライブラリとして有名な「PyPDF2」は、現在その後継である「pypdf」の利用が推奨されています。
ライブラリ | 機能の豊富さ | 日本語対応の容易さ | 特徴 | 主な用途 |
---|---|---|---|---|
ReportLab | ◎ 非常に豊富 | △ フォント登録が必要 | 自由度が高く、複雑なレイアウトも可能 | 新規PDFの作成、帳票、レポート |
pypdf (旧PyPDF2) | △ 限定的 | – (テキスト描画は非推奨) | 既存PDFの分割・結合・情報抽出が得意 | 既存PDFの加工・編集 |
FPDF (PyFPDF) | ◯ 豊富 | ◯ 比較的容易 | シンプルで学習コストが低い | 新規PDFの作成、定型的なドキュメント |
PDFKit | ◯ 豊富 | ◎ 簡単 | HTML/CSSからPDFを生成できる | WebページのPDF化、Webベースの帳票 |
ご覧の通り、各ライブラリには得意な分野があります。
- ゼロから複雑なPDFを作りたいならReportLab
- 既存のPDFファイルを操作したいならpypdf(旧PyPDF2)
- 手軽にシンプルなPDFを作りたいならFPDF
- WebページをそのままPDFにしたいならPDFKit
このように、目的に応じて使い分けるのが賢い選択です。
ReportLabは、多機能性と自由度の高さから、特に業務システムの帳票出力などで選ばれることが多いライブラリです。
Python開発環境Spyderとは?使い方からVS Codeとの比較まで解説
まとめ
この記事では、PythonのPDF生成ライブラリReportLabについて、基本的な使い方から日本語対応、図形や画像の挿入といった応用テクニックまで幅広く解説しました。
ReportLabは、少し慣れが必要な部分もありますが、一度使い方をマスターすれば、PDF作成業務を大幅に効率化できる強力なツールになります。
請求書や納品書、各種レポートなど、定型的なドキュメント作成の自動化に、ぜひReportLabを活用してみてください。
まずはこの記事のサンプルコードを動かしてみて、「PythonでPDFを作る」という体験から始めてみるのがおすすめです。