Skip to content

apple-x-co/rs-pdf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

166 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rs-pdf

JSONからPDFを生成するCLIツール

概要

rs-pdfは、JSON設定ファイルからPDFドキュメントを生成するRustで書かれたコマンドラインツールです。テキスト、画像、図形、線などの要素を組み合わせて、複雑なレイアウトのPDFを作成できます。

特徴

📄 JSON設定による柔軟なレイアウト - JSON形式の設定ファイルでPDFのレイアウトを定義
🎨 豊富な要素サポート - テキスト、画像、矩形、線を組み合わせた文書作成
📐 レスポンシブレイアウト - FlexibleコンテナによるFlexboxライクなレイアウト
🎯 精密な位置指定 - ミリメートル単位での正確な要素配置
🌈 スタイルカスタマイズ - 色、ボーダー、フォントなど詳細なスタイル設定
🔤 日本語フォント対応 - CJKフォントを含む外部フォントの読み込み
📱 マルチページ対応 - 複数ページの文書生成
🔄 自動ページ分割 - 動的ページでのコンテンツ自動改ページ機能

使用方法

rs-pdf -i input.json -o output.pdf

オプション

  • -i, --input <PATH> : 入力JSONファイルのパス
  • -o, --output <PATH> : 出力PDFファイルのパス
  • -d, --debug : デバッグモード(グリッド表示)
  • -a, --allow-override : 既存ファイルの上書きを許可

JSON設定ファイルの構造

基本構造

{
  "$schema": "https://github.com/apple-x-co/rs-pdf/blob/master/schema/schema.json",
  "document": {
    "title": "文書タイトル",
    "width": 210.0,
    "height": 297.0,
    "font_path": "fonts/NotoSansCJKjp-Thin.ttf",
    "pages": [
      {
        "type": "static", // または "dynamic"
        "objects": [
          // ページ内の要素
        ]
      }
    ]
  }
}

ページタイプ

rs-pdfは2種類のページタイプをサポートしています:

静的ページ (static)

要素を相対位置または絶対位置に配置します。

{
  "type": "static",
  "objects": [
    // 要素を直接配置
  ]
}

動的ページ (dynamic)

自動ページ分割機能を持つページ形式です。
共通要素は静的ページ同様に相対位置または絶対位置に配置します。
コンテンツ要素がコンテンツ領域に収まらない場合は自動的に次ページに分割されます。

{
  "type": "dynamic",
  "common": {
    "objects": [
      // 全ページに共通して表示される要素(ヘッダー、フッターなど)
    ]
  },
  "content": {
    "frame": {
      "point": { "x": 10.0, "y": 50.0 },
      "size": { "width": 190.0, "height": 240.0 }
    },
    "objects": [
      // 自動ページ分割される動的コンテンツ
    ]
  }
}

また2ページ目以降に共通して表示される要素を変えることも可能です。

{
  "type": "dynamic",
  "common": {
    // 全ページ共通コンテンツ
  },
  "content": {
    // 動的コンテンツ
  },
  "continuation": {
    "common_objects": [
      // 2ページ目以降に共通して表示される要素(ヘッダー、フッターなど)
    ],
    "content_frame": {
      // 2ページ目以降の動的コンテンツを表示する矩形
    }
  }
}

動的ページの利点:

  • コンテンツ量が可変の文書(請求書、納品書など)に最適
  • ヘッダーやフッターを全ページに自動的に配置
  • コンテンツ領域を超える要素を自動的に次ページに配置

サポートされる要素

テキスト要素

{
  "type": "text",
  "text": "表示するテキスト",
  "font_size": 24.0,
  "frame": {
    "point": { "x": 10.0, "y": 10.0 },
    "size": { "width": 100.0, "height": 30.0 }
  },
  "style": {
    "text_fill_color": { "red": 0, "green": 0, "blue": 255 },
    "border_color": { "red": 200, "green": 200, "blue": 200 }
  }
}

画像要素

{
  "type": "image",
  "path": "assets/images/sample.png",
  "frame": {
    "point": { "x": 50.0, "y": 50.0 },
    "size": null
  }
}

矩形要素

{
  "type": "rectangle",
  "frame": {
    "point": { "x": 0.0, "y": 0.0 },
    "size": { "width": 100.0, "height": 50.0 }
  },
  "style": {
    "background_color": { "red": 200, "green": 255, "blue": 200 },
    "border_width": { "width": 1.0 }
  }
}

線要素

{
  "type": "line",
  "frame": {
    "point": { "x": 0.0, "y": 0.0 },
    "size": { "width": 100.0, "height": 0.0 }
  },
  "style": {
    "border_style": { "line_style": "dash", "dash_1": 2 }
  }
}

コンテナ要素

通常のコンテナ

{
  "type": "objects",
  "direction": "horizontal",
  "frame": {
    "point": { "x": 10.0, "y": 10.0 },
    "size": { "width": 200.0, "height": 100.0 }
  },
  "objects": [
    // 子要素
  ]
}

Flexibleコンテナ

{
  "type": "flexible",
  "direction": "horizontal",
  "objects": [
    // 子要素(自動的にサイズが調整される)
  ]
}

スタイル設定

色設定

  • background_color : 背景色
  • border_color : ボーダー色
  • text_fill_color : テキスト塗りつぶし色
  • text_outline_color : テキストアウトライン色

ボーダー設定

  • border_width : ボーダー幅
  • border_style : ボーダースタイル(solid/dash)

テキストスタイル

  • text_style : テキスト描画モード(fill/stroke/fill_stroke)
  • text_outline_style : アウトラインスタイル

座標系とサイズ

  • 単位: ミリメートル (mm)
  • 座標系: 左上原点
  • ページサイズ: A4サイズの場合 width: 210.0, height: 297.0

設定例

完全な設定例は以下のファイルを参照してください:

  • 静的ページの例: demo/static.json
  • 動的ページの例: demo/dynamic.json

推奨フォント

日本語表示には以下のフォントを推奨します:

https://github.com/minoryorg/Noto-Sans-CJK-JP

サポートされていない機能

  • 圧縮
  • パスワード保護

スキーマ検証

JSON設定ファイルは schema/schema.json のスキーマに基づいて検証されます。不正な設定の場合はエラーメッセージが表示されます。

About

📔 JSONからPDFを生成するCLIツール

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages