テンプレート
テンプレートは PDF の見た目を定義する HTML ドキュメントです。 LiquidJS テンプレートエンジンを使用して動的なデータを埋め込めます。
テンプレートの作成
- サイドバーの「テンプレート」をクリックし、テンプレート一覧を開きます。
- 「新規作成」ボタンをクリックし、テンプレート名とキーを入力します。
- エディタに HTML を記述し、「保存」ボタンをクリックします。
テンプレートキー
テンプレートキーは API からテンプレートを指定するための識別子です。 半角英数字・ハイフン・アンダースコアが使用できます。 API リクエストの template パラメータにこのキーを指定します。
LiquidJS によるデータ埋め込み
Printgraph は LiquidJS テンプレートエンジンをサポートしています。 API リクエストの params に渡した値をテンプレート内で参照できます。
主な構文
- {{ variable }} — 変数の出力
- {% if condition %} ... {% endif %} — 条件分岐
- {% for item in list %} ... {% endfor %} — 繰り返し
QR コードの埋め込み
値を QR コードに変換するフィルターを 2 つ用意しています。生成される QR コードは SVG のベクター画像なので、拡大しても印刷してもぼやけません。
- {{ 値 | qr }} —
imgタグごとその場に展開します。 - {{ 値 | qr_data_uri }} — 画像の data URI だけを返します。
imgのsrc属性に埋め込んで、クラスやスタイルを自由に指定したい場合に使います。
<!-- その場で img タグごと展開する -->
{{ invoiceUrl | qr }}
<!-- サイズ(px)と誤り訂正レベルを指定する -->
{{ invoiceUrl | qr: 160, 'H' }}
<!-- data URI だけを展開して img の src に埋め込む -->
<img src="{{ invoiceUrl | qr_data_uri }}" class="qr" width="120">引数
- サイズ({{ 値 | qr: 160 }})—
imgの一辺のピクセル数。1〜2000 の整数で、既定値は 128 です。qr_data_uri では受け付けません(img側で指定してください)。 - 誤り訂正レベル({{ 値 | qr: 160, 'H' }})—
L/M/Q/Hのいずれか。既定値はMです。レベルを上げるほど汚れやかすれに強くなりますが、QR コードは細かくなり、格納できるデータ量も減ります。qr_data_uri では {{ 値 | qr_data_uri: 'H' }} のように第 1 引数で指定します。
制限
- QR コードにできる値の長さ(UTF-8 のバイト数)は誤り訂正レベルによって変わります:
L2,953 /M2,331 /Q1,663 /H1,273 バイトまで - QR コードにできるのは文字列と数値のみ(配列やオブジェクトは不可)
- 値が空のときは QR コードを出力しません(エラーにはなりません)。 読み取っても何も出てこない QR コードが印刷されるのを避けるためです。{{ 値 | qr }} は
imgタグごと出力しないので {% if %} で囲む必要はありません。{{ 値 | qr_data_uri }} の場合はimgタグを自分で書くため、空のimgタグが残ります(画像は表示されません)。タグごと消したい場合は {% if %} で囲んでください。
テンプレート例(請求書)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<style>
body { font-family: sans-serif; padding: 40px; }
h1 { color: #333; }
.amount { font-size: 2rem; font-weight: bold; }
</style>
</head>
<body>
<h1>請求書 #{{ invoiceNumber }}</h1>
<p>宛先: {{ customerName }} 様</p>
<table>
<thead>
<tr><th>商品名</th><th>単価</th><th>数量</th></tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td>{{ item.name }}</td>
<td>¥{{ item.price }}</td>
<td>{{ item.quantity }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p class="amount">合計: ¥{{ amount }}</p>
<p>スマートフォンで読み取ると請求書の詳細を確認できます。</p>
{{ invoiceUrl | qr: 100 }}
</body>
</html>配列・オブジェクトを渡す
params には文字列だけでなく、配列やオブジェクトを含む任意の JSON を渡せます。上の請求書テンプレートの items のように、明細行を {% for %} で繰り返し出力する場合に使います。
{
"templateId": "your-template-id",
"params": {
"invoiceNumber": "INV-001",
"customerName": "山田太郎",
"items": [
{ "name": "商品A", "price": 1000, "quantity": 2 },
{ "name": "商品B", "price": 500, "quantity": 1 }
],
"amount": 2500,
"invoiceUrl": "https://example.com/invoices/INV-001"
}
}エディタの「変数」タブで変数の種別を JSON にすると、初期値を JSON で設定できます。この初期値はプレビューと生成画面で使われるため、 明細行のあるテンプレートもエディタ上で表示を確認できます。
制限
- ネストの深さ: 10 段まで
- 配列の要素数: 100 個まで
- オブジェクトのキー数: 200 個まで
- 文字列の長さ: 10,000 文字まで
params全体の値の個数: 10,000 個まで
全テンプレートで共有する変数
会社名やロゴ URL のように、どのテンプレートでも同じ値になるものは「共有変数」として 1 箇所で管理できます。管理画面の 共有変数 ページで設定すると、すべてのテンプレートから {{ global.変数名 }} で参照できます。
<footer>
<p>{{ global.companyName }}</p>
<p>{{ global.companyAddress }}</p>
<img src="{{ global.logoUrl }}" alt="{{ global.companyName }}" />
</footer>変数の種別(文字列 / JSON)や編集の操作は、テンプレートごとの変数と同じです。
テンプレートごとの変数との違い
- 値はサーバー側で適用されるため、API リクエストの
paramsでは上書きできません。paramsに global キーを含めたリクエストは 400 エラーになります。 - テンプレートのバージョンには保存されません。共有変数を変更すると、 過去のバージョンを含むすべてのテンプレートに即座に反映されます。
- テンプレートが参照している共有変数を削除すると、そのテンプレートの PDF 生成は失敗します。
- 登録できる個数: 30 個まで
バージョン管理
テンプレートを保存するたびに新しいバージョンが作成されます。 「メインバージョン」として設定したバージョンが API から呼び出されます。 過去のバージョンに戻したい場合は、バージョン一覧から「メインに設定」をクリックしてください。