logo

Jinja2 (Python)

Python のテンプレートエンジン Jinja2 を使用して HTML 文字列を生成し、それを pdfg の API に送信して PDF に変換する方法を説明します。

技術的な概要

  1. Jinja2 テンプレートを作成
  2. テンプレートにデータを渡して HTML 文字列を生成
  3. 生成された 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)