クイックスタート

最短で、最初の帳票を pdfme と ReportLab へ書き出すまでを追います。所要時間はおよそ 5 分です。

denReport はブラウザ内で完結して動作します。サーバー側の仕組みやアカウントはなく、デザイナー・中間表現・書き出し器のすべてがクライアントサイドで動きます。まずはリポジトリを手元で起動し、白紙のキャンバスから最初の帳票を組み立ててみましょう。

denReport はまだ 1.0 未満です。ここで扱う @denreport/web は、リポジトリを実行すると得られるリファレンスアプリです。

必要なもの

次の 2 つが必要です。バージョンは固定してあり、これ以外は不要です。

  • Node.js 24 以上
  • pnpmCorepack 経由で有効化)

インストール

リポジトリをクローンし、依存をインストールします。

git clone https://github.com/denreport/denreport.git
cd denreport
corepack enable
pnpm install

デザイナーを開く

開発サーバーを起動します。Ctrl + C で停止できます。

pnpm --filter @denreport/web dev

Vite が表示する URL(既定では http://localhost:5173)を開くと、デザイナーが起動します。左のパレットから要素をキャンバスへドラッグして配置します。

最初の帳票

denReport のレイアウトは、バージョン管理された JSON の**中間表現(IR)**として保存されます。座標は左上原点のミリメートル。次は最小の請求書レイアウトの例です。

{
  "version": "1.1",
  "page": { "width": 210, "height": 297 },
  "font": { "name": "Noto Sans JP" },
  "elements": [
    { "type": "text", "id": "title", "x": 15, "y": 18,
      "w": 80, "h": 10, "text": "請求書",
      "fontSize": 18, "align": "left", "lineHeight": 1.25 },
    { "type": "table", "id": "items", "x": 15, "y": 70,
      "bind": "items",
      "columns": [
        { "key": "name", "label": "品目", "width": 90 },
        { "key": "qty", "label": "数量", "width": 20 },
        { "key": "amount", "label": "金額", "width": 30 }
      ],
      "rowHeight": 7, "headerHeight": 8, "minRows": 10 }
  ]
}
データは扱いません。 IR に持つのはレイアウトと結合キー(bind)だけです。明細の実データは書き出し時に外から与えます。

書き出す

ツールバーの「書き出し」から、ターゲットを選びます。どちらも同じ IR から生成され、書き出し前に互換性の警告が示されます。

表現pdfmeReportLab
テキスト・罫線・矩形対応対応
複数ページに分割される表対応対応
均等割付(justify対応対応
楕円対応対応

書き出しの成果物は、pdfme ではテンプレート+入力データ(JSON)、ReportLab ではフォント同梱で単体動作する Python コードです。いずれも生成物に表示義務や開示義務はありません。

次に読む

  • 主要な概念 — 中間表現・ターゲット・互換性マトリクスの関係(準備中)
  • 表とページ分割 — 明細が複数ページにまたがる帳票の設計(準備中)
  • 中間表現 IR の仕様 — 要素の型と属性の全リファレンス(準備中)