Jinja2 (Python)
Python のテンプレートエンジン Jinja2 を使用して HTML 文字列を生成し、それを pdfg の API に送信して PDF に変換する方法を説明します。
技術的な概要
- Jinja2 テンプレートを作成
- テンプレートにデータを渡して HTML 文字列を生成
- 生成された HTML 文字列を pdfg の API に送信して PDF 化
サンプル
テンプレートの定義
{# templates/invoice.html #}
<!DOCTYPE html>
<html>
<head></head>
<body>
<div class="invoice">
<h1>請求書</h1>
<table>
<thead>
<tr>
<th>品目</th>
<th>金額</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.price }}円</td>
</tr>
{% endfor %}
</tbody>
</table>
<p class="total">合計: {{ total }}円</p>
</div>
</body>
</html>
テンプレートの使用と PDF 生成
# generate_pdf.py
from jinja2 import Environment, FileSystemLoader
import requests
# Jinja2環境の設定
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('invoice.html')
# データの準備
items = [
{'name': '商品A', 'price': 1000},
{'name': '商品B', 'price': 2000},
]
total = 3000
# HTML文字列の生成
html = template.render(items=items, total=total)
# pdfgのAPIにリクエスト
response = requests.post(
'https://api.pdfg.net/v1',
headers={
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
json={
'html': html,
'pdfOptions': {
'format': 'A4'
}
}
)
# PDFの保存
if response.status_code == 200:
with open('invoice.pdf', 'wb') as f:
f.write(response.content)