PythonでPDFを生成する
私の favorite lib は pdf-reports です。
Pythonを使用したPDFレポートの作成
Pythonは、豊富なライブラリやモジュールを備えており、プロフェッショナルなPDFレポートの作成に強力なツールを提供します。本ガイドでは、Pythonを使用してPDFドキュメントを作成する方法について説明し、ReportLab、FPDF、Xhtml2pdf、WeasyPrint、Jinja2、pdf-reports、PdfKitなどの人気のあるライブラリをカバーします。これは、2026年のドキュメントツール: Markdown、LaTeX、PDFおよび印刷ワークフロー ハブの一部です。

なぜPythonでPDFレポートを生成するのか?
- 自動化: Pythonスクリプトを使用してレポートの生成を自動化し、時間の節約と人為的なエラーの削減が可能です。
- カスタマイズ: テキスト、画像、テーブル、グラフを追加して、特定のニーズに合わせたレポートを作成できます。
- 一貫性: 標準化されたテンプレートを使用して、レポート全体にブランドの一貫性を保証できます。
- 多様性: 納品書、ビジネスレポート、データサマリー、またはその他のドキュメントタイプを生成できます。
PDF生成に使用できる人気のあるPythonライブラリ
ReportLab
ReportLabは、PDFドキュメントをプログラマティックに作成できる多機能なライブラリです。テキスト、画像、テーブル、グラフィックを追加できるため、さまざまなレポートタイプに適しています。
メリット:
- 機能が豊富
- 高レベルAPIにより簡単に使用可能
- 注釈やインタラクティブフォームなどの高度な機能をサポート
デメリット:
- 他のライブラリと比較して学習曲線が急
- 一部のタスクでは直感的なAPIが提供されていない
ReportLabの使用方法
インストール: pipを使用してReportLabをインストールしてください:
pip install reportlab
基本的なセットアップ:
from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# テキストの追加:
python c.drawString(100, 800, "Hello World")
# PDFの保存:
python c.save()
FPDF
FPDFは、純粋なPythonで書かれたシンプルで強力なPDF作成ライブラリです。最小限のコードで基本的なPDFドキュメントを作成するのに最適です。
メリット:
- 学習が簡単で使いやすい
- 軽量で高速
- Unicode文字をサポート
デメリット:
- ReportLabと比較して機能セットが限定的
- ページ上の要素配置に関するコントロールが限られている
FPDFの使用方法
インストール: pipを使用してFPDFをインストールしてください:
pip install fpdf2
基本的なセットアップ:
from fpdf import FPDF pdf = FPDF()
# テキストの追加:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# PDFの保存:
python pdf.output('hello.pdf', 'F')
Xhtml2pdf
Xhtml2pdfは、ReportLabを使用して裏側で動作するCSS/HTMLからPDFへのコンバーターです。HTMLテンプレートからPDFを生成するため、ウェブからPDFへのコンバーションに最適です。
メリット:
- HTMLとCSSをPDFに変換
- 複雑なレイアウトとスタイルをサポート
- Djangoなどのウェブフレームワークとよく統合
デメリット:
- HTMLとCSSの知識が必要
- シンプルでウェブベースでないレポートには不向きな場合がある
Xhtml2pdfの使用方法
インストール: pipを使用してXhtml2pdfをインストールしてください:
pip install xhtml2pdf
HTMLからPDFの生成: python
from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
pisa_status = pisa.CreatePDF(html, dest=output_file)
WeasyPrint
WeasyPrintは、HTMLとCSSを高品質にレンダリングしてPDFドキュメントに変換するための多機能なPythonライブラリです。特に、レポート、納品書、または正確なフォーマットが必要なドキュメントの生成に適しています。以下に、さまざまなシナリオでWeasyPrintを使用するいくつかの例を示します。
機能
- HTMLとCSSをPDFドキュメントに変換。
- Jinja2などのテンプレートエンジンを使用して動的なデータレンダリングを処理。
インストール:
pip install weasyprint
HTML文字列からPDFを生成する簡単な例:
from weasyprint import HTML
html_string = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>Hello, WeasyPrint!</h1>
<p>This is a sample PDF generated using WeasyPrint.</p>
</body>
</html>
"""
HTML(string=html_string).write_pdf("sample.pdf")
この例では、WeasyPrintのHTMLクラスを使用して、HTML文字列を"sample.pdf"という名前のPDFファイルに変換しています。
ファイルからHTMLをロードする
HTMLコンテンツを直接ファイルからロードすることもできます:
from weasyprint import HTML
# ファイルからHTMLをロード
HTML('sample.html').write_pdf('output.pdf')
この方法は、HTMLコンテンツが外部ファイルに保存されている場合に役立ちます。 CSSスタイルシートの使用
WeasyPrintは、CSSスタイルシートを使用してPDFドキュメントをスタイル付けする機能をサポートしています。CSSファイルを適用する方法は以下の通りです:
from weasyprint import HTML
# ファイルからHTMLとCSSをロード
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])
これにより、より複雑なスタイル付けが可能になり、視覚的に魅力的なPDFを作成しやすくなります。
Jinja2
Jinja2は、Python用の強力なテンプレートエンジンで、テンプレート内にPython式、条件付き、ループを埋め込むことで動的なコンテンツを生成できます。本ガイドでは、Jinja2を使用するさまざまな例を紹介します。基本的な変数置換から、テンプレートの継承などの高度な機能まで。
Jinja2の主な特徴
- WeasyPrintやReportLabと併用して動的なHTMLコンテンツを生成するためのテンプレートエンジン。
- 事前に定義されたテンプレートにデータを埋め込むのに最適。
- インストール:
pip install jinja2
公式Jinja2ドキュメンテーションページで例を参照してください: https://jinja.palletsprojects.com/en/3.0.x/
pdfkit
pdfkitは、HTMLコンテンツをPDFドキュメントに変換するプロセスを簡略化する強力なPythonライブラリです。wkhtmltopdfユーティリティのラッパーとして動作し、WebKitを使用してHTMLページを正確にPDF形式でレンダリングします。本ガイドでは、pdfkitを使用してPDFを生成するさまざまな例と使用ケースを紹介します。
主な特徴
- wkhtmltopdfのPythonラッパーでHTMLをPDFに変換。
- システム全体にwkhtmltopdfをインストールする必要があります。https://wkhtmltopdf.org/downloads.html
インストール:
# そしてwkhtmltopdfをインストールしてください。
基本的な使用方法 - HTML文字列をPDFに変換
pdfkit.from_string()を使用して簡単なHTML文字列をPDFファイルに変換できます:
import pdfkit
html_sample = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>This is a heading</h1>
<p>First line.</p>
<p>Second line.</p>
<p>Third line.</p>
<p>Fourth line.</p>
</body>
</html>
"""
pdfkit.from_string(html_sample, 'output.pdf')
これにより、現在のディレクトリにoutput.pdfという名前のPDFファイルが生成されます。
ローカルHTMLファイルをPDFに変換する
ローカルに保存されたHTMLファイルを使用するには、pdfkit.from_file()を使用してください:
import pdfkit
pdfkit.from_file('local.html', 'sample.pdf')
PDFレポートライブラリ(pdf-reports)
Pythonでpdf-reportsライブラリを使用してPDFレポートを作成するには、HTMLまたはPugテンプレートからプロフェッショナルな見た目のドキュメントを生成する強力な方法です。このライブラリは、Semantic UIフレームワークを介して現代的なコンポーネントを使用し、テーブル、プロット、その他の要素をPDFに埋め込むためのルーチンを提供します。
pdf-reportsライブラリは、HTMLまたはPugテンプレートから視覚的に魅力的なPDFレポートを作成するように設計されています。公式にはPython 3.xをサポートしていますが、適切なバージョンのweasyprintを使用すればPython 2.xでも動作します。これは、動的なかつ構造化されたドキュメントをプログラマティックに生成するための汎用的なツールです。
主な特徴
- 現代的なコンポーネント: Semantic UIフレームワークを使用して現代的なコンポーネントを提供。
- 要素の埋め込み: テーブル、プロット、その他の要素をPDFに埋め込むことが可能。
- テンプレートサポート: HTMLおよびPugテンプレートをサポートし、柔軟なレポートデザインが可能。
pdf-reportsの使用例
インストール:
pip install pdf-reports
pdf-reportsライブラリの使用例:
from pdf_reports import PDFReport
# テンプレートファイル(template.pug)を定義
template = """
doctype html
html
head
title= title
body
h1= title
p This is a sample report.
"""
# PDFレポートインスタンスの作成
report = PDFReport(template)
# テンプレートのコンテキストを設定
context = {
'title': 'Sample Report'
}
# PDFの生成
pdf = report.generate(context, output='sample_report.pdf')
PythonにおけるPDF生成の展望
Pythonには、レポートの作成に強力なライブラリが多数存在します。請求書、ビジネスレポート、またはデータサマリーの作成に関係なく、これらのツールを使用してプロセスを自動化し、ドキュメントをカスタマイズし、ブランドの一貫性を保証できます。ご自身のニーズに最も適したライブラリを選択し、今日からプロフェッショナルなPDFを作成し始めましょう!