POST
/pdf/generate
指定したテンプレートとパラメーターを使用して PDF を生成します。 生成された PDF はバイナリ形式で返されます。
リクエスト
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
template | string | 必須 | 使用するテンプレートのキー |
params | object | 任意 | テンプレートに渡す変数のキーバリューマップ。 値には文字列・数値・真偽値・null のほか、配列やオブジェクトを 含む任意の JSON を指定できます。 |
params の制限
params が下記のいずれかを超えると 400 Bad Request を返します。
- ネストの深さ: 10 段まで
- 配列の要素数: 100 個まで
- オブジェクトのキー数: 200 個まで
- 文字列の長さ: 10,000 文字まで
- 全体の値の個数: 10,000 個まで
- トップレベルに
globalキーを含めないこと。共有変数のための 予約名前空間で、値はサーバー側で注入されます。
レスポンス
| ステータス | Content-Type | 説明 |
|---|---|---|
200 OK | application/pdf | 生成された PDF バイナリ |
404 Not Found | — | テンプレートが見つからない |
429 Too Many Requests | — | 月次の生成上限を超過 |
cURL
curl -X POST https://api.printgraph.jp/v1/pdf/generate \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "invoice-template",
"params": {
"invoiceNumber": "INV-001",
"customerName": "山田太郎",
"items": [
{ "name": "商品A", "price": 1000, "quantity": 2 },
{ "name": "商品B", "price": 8000, "quantity": 1 }
],
"amount": 10000
}
}' \
--output invoice.pdfHTTP クライアントを使った実装例
以下は SDK を使わずに直接 HTTP リクエストを送る場合のサンプルです。 Node.js・PHP 向けには公式 SDK を利用するとより簡潔に記述できます。
Node.js / TypeScript
JavaScript / TypeScript 環境では JavaScript SDK(@printgraph/js-sdk) を使うと数行で同じ処理を実装できます。
import fs from 'node:fs';
const response = await fetch('https://api.printgraph.jp/v1/pdf/generate', {
method: 'POST',
headers: {
'Authorization': 'Token YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
template: 'invoice-template',
params: {
invoiceNumber: 'INV-001',
customerName: '山田太郎',
items: [
{ name: '商品A', price: 1000, quantity: 2 },
{ name: '商品B', price: 8000, quantity: 1 },
],
amount: 10000,
},
}),
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
const buffer = await response.arrayBuffer();
fs.writeFileSync('invoice.pdf', Buffer.from(buffer));PHP
PHP 環境では PHP SDK(printgraph/php-sdk) を使うとより簡潔に記述できます。
<?php
$apiKey = getenv('PRINTGRAPH_TOKEN');
$ch = curl_init('https://api.printgraph.jp/v1/pdf/generate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Token ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'template' => 'invoice-template',
'params' => [
'invoiceNumber' => 'INV-001',
'customerName' => '山田太郎',
'items' => [
['name' => '商品A', 'price' => 1000, 'quantity' => 2],
['name' => '商品B', 'price' => 8000, 'quantity' => 1],
],
'amount' => 10000,
],
]),
]);
$pdf = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($statusCode !== 200) {
throw new RuntimeException("HTTP error: $statusCode");
}
file_put_contents('invoice.pdf', $pdf);