機能

地味でも重要な部分を、正しく。

PDF ラッパーに入ったブラウザのスクリーンショットではなく、本物のドキュメントセマンティクス。

Browse use cases
/01

ピクセル単位の制御

x/y はミリメートル、x_anchor で右端揃え、ラベルではサブミリメートル精度で配置。座標であって、近似ではありません。

// inside elements[i]
"x_anchor": {
  "reference": "content_right",
  "offset": 6
}
/02

ベクターバーコード

GS1-128、QR、PDF417、DataMatrix を含む 30 以上のシンボロジー。すべてベクター。全長精度 0.1 mm。

// 30+ formats: code128, qrcode, datamatrix, pdf417, ...
"type": "barcode",
"format": "code128",
"content": "INV-2026-001"
Why vector beats raster
/03

フォントフォールバック

font_mode は strict(宣言したフォントが全グリフをカバーする必要あり)、prefer(内蔵フォントへフォールバック)、auto(エンジン任せ)の 3 段。auto/prefer 全失敗時は API-504 を返します —— 静かに失敗しません。

// inside style{}
"font_family": "NotoSans-Regular",
"font_mode": "prefer"
/04

コンプライアンスモード

settings.profile = "pdfa-3b" を指定するだけで PDF/A-3b 準拠と、Factur-X / ZUGFeRD が要求する埋め込み XML 添付ストリームが両方有効になります。1 フィールドで 1 つの準拠文書。

// top-level on DocumentRequest
"settings": {
  "profile": "pdfa-3b"
}
PDF/A and Factur-X, explained
/05

変数 + ページネーション

{page} / {total_pages} はレイアウト後に解決。keep_together、widow/orphan、page_break ブロック。

// element of type "variable"
{ "type": "variable",
  "name": "page",
  "scope": "system" }
/06

ページネーションするテーブル

ページをまたぐ row_span、ヘッダー繰り返し、alternate_fill、複合二重ボーダー。常に壊れる 1 %。

// inside table element
"pagination": {
  "keep_spans_together": true
}
/07

1 つの JSON、2 つの入口

同じ DocumentRequest JSON が POST /api/v1/pdf/render と editor.gpdf.com の GUI エディタを駆動。ビジュアル編集、API 出力、手書き JSON —— 3 つの経路が同じファイルを往復します。

// three routes, one engine
POST /api/v1/pdf/render
POST /api/v1/template-render
POST /api/v1/e-invoice/render
Read the API reference
/08

請求書のために構築

ページあたり $0.00005、p50 3 ms、CJK 組み込み、PDF/A-3 添付ストリーム。フィンテック、ERP、税務コンプライアンスチームが最初に確認する 4 つの数字。

// invoice — header + table pattern
{ "size": "a4",
  "elements": [
    { "type": "text",  "x": 18, "y": 22, ... },
    { "type": "table", "x": 18, "y": 60, ... }
  ]}
Why JSON beats HTML→PDF
/09

配送ラベルのために構築

label_100_150 と label_4_6_in サイズプリセット。0.1 mm 精度のベクター GS1-128、ITF-14、SSCC。配送会社や 3PL はピーク時もラスタライズされたバーコードなしで印刷できます。

// 4×6 thermal shipping label
{ "size": "label_4_6_in",
  "elements": [{
    "type": "barcode",
    "format": "code128",
    "content": "1Z999AA10123456784" }]}
Shipping-label use case