# 設定フォーマット PicoPDFではデータをPDF変換するためにJSONフォーマットの設定ファイルを利用する。 設定ファイルの内容について説明する。 [PDFへ変換情報](#PDF変換情報)と[セクション設定情報](#セクション設定情報)に分かれる。 ## PDF変換情報 | 名前 | タイプ | 初期値 | 説明 | |----------------|--------------------------------|------------------|---------------------------------------------------------------------------------------| | Size | string または [number, number] | A4 | 用紙サイズ、文字列の場合はA0~A5またはB0~B5、配列の場合は幅と高さを指定 | | Orientation | string | Vertical | 用紙向き、VerticalかHorizontalを指定 | | DefaultFont | string または FontPath[] | 必須 | フォント名、フォントファイル名、配列指定時は[フォールバックフォント](#フォント)となる | | Header | string | | ページヘッダセクション名 | | Footer | string | | ページフッタセクション名 | | Detail | string または { .. } | 必須 | ディティールセクション名、またはサブセクション構造 | | Padding | [number ..] | [0, 0, 0, 0] | ページ余白、最大4つまで上右下左の順に指定する | | DefaultCulture | string | InvariantCulture | 指定がない場合のCultureInfo | サブセクション構造は入れ子構造で指定する。 | 名前 | タイプ | 初期値 | 説明 | |----------|----------------------|--------|----------------------------------------------------| | BreakKey | string | | セクションブレークキー | | Header | string | | ヘッダセクション名 | | Footer | string | | フッタセクション名 | | Detail | string または { .. } | 必須 | ディティールセクション名、またはサブセクション構造 | サブセクションを持たない場合は次のように記述する。 ``` { "Header": "PageHeader", "Detail": "Detail", "Footer": "PageFooter", } ``` 2段階のサブセクションを持つ場合は次のように記述する。 ``` { "Header": "PageHeader", "Detail": { "BreakKey": "Key1", "Header": "Header1", "Detail": { "BreakKey": "Key2", "Header": "Header2", "Detail": "Detail", "Footer": "Footer2", }, "Footer": "Footer1", }, "Footer": "PageFooter", } ``` ## セクション設定情報 [PDFへ変換情報](#PDF変換情報)で指定されたセクション名の定義を行う。 | 名前 | タイプ | 初期値 | 説明 | |-----------|-----------|----------|-------------------------------------------------------------------------| | Type | string | 必須 | HeaderSection、DetailSection、TotalSection、FooterSectionのいずれか指定 | | Name | string | 必須 | セクション名、重複不可 | | Height | number | 必須 | セクションの高さ | | ViewMode | string | Type依存 | Every、PageFirst、First、Lastのいずれか指定 | | PageBreak | bool | false | 改ページ、trueの場合、印字後に改ページを行う | | Elements | Element[] | 必須 | [PDF表示要素](#PDF表示要素) | TotalSectionはサブセクションの境界でDetailSectionの次に表示される。 FooterSectionはサブセクションの境界でページ下部に表示される。 ViewModeで出現タイミングを変更できる。 Everyは毎ページ表示される。 PageFirstはページ先頭のみ表示される。 Firstはキーブレイク時のみ表示される。 Lastはキーブレイク後に表示される。 ViewModeはセクションのタイプ次第で指定できるものが異なる。 | 名前 | 初期値 | Every | PageFirst | First | Last | |---------------|--------|-------|-----------|-------|------| | HeaderSection | First | ○ | ○ | ○ | × | | DetailSection | Every | ○ | × | × | × | | TotalSection | Last | ○ | × | × | ○ | | FooterSection | Last | ○ | × | × | ○ | ## PDF表示要素 セクションのElementsとして指定する。 座標指定はセクション内のローカル座標系指定となる。 共通プロパティ: | 名前 | タイプ | 初期値 | 説明 | |------|--------|--------|-----------------------------------| | X | number | 必須 | X座標 | | Y | number | 必須 | Y座標、用紙左上を原点とした座標系 | | Type | string | 必須 | 要素タイプ、詳細は後述 | | Name | string | "" | 要素名 | Typeで指定した要素タイプに応じて設定できるプロパティが異なる。 * TextElement: 固定文字を表示する。 | 名前 | タイプ | 初期値 | 説明 | |-----------|--------------------------|-------------|-----------------------------------------------------------------| | Text | string | 必須 | 固定表示テキスト | | Font | string または FontPath[] | DefaultFont | フォント、配列指定時は[フォールバックフォント](#フォント)となる | | Size | number | 必須 | 文字サイズ | | Alignment | string | Start | 文字寄せ方向、Start、Center、Endのいずれか指定 | | Style | string | None | [文字スタイル](#文字スタイル) | | Width | number | 0 | テキスト幅 | | Height | number | 0 | テキスト高さ | | Color | string | | 文字色 | * BindElement: データの内容をバインドして表示する。 | 名前 | タイプ | 初期値 | 説明 | |-----------|--------------------------|----------------|-----------------------------------------------------------------| | Bind | string | 必須 | バインドプロパティ名 | | Format | string | "" | バインド時のフォーマット | | Font | string または FontPath[] | DefaultFont | フォント、配列指定時は[フォールバックフォント](#フォント)となる | | Size | number | 必須 | 文字サイズ | | Alignment | string | Start | 文字寄せ方向、Start、Center、Endのいずれか指定 | | Style | string | None | [文字スタイル](#文字スタイル) | | Width | number | 0 | テキスト幅 | | Height | number | 0 | テキスト高さ | | Color | string | | 文字色 | | Culture | string | DefaultCulture | フォーマット時のCultureInfo | * SummaryElement: データの内容を集計してバインドする。 | 名前 | タイプ | 初期値 | 説明 | |---------------|--------------------------|----------------|------------------------------------------------------------------| | Bind | string | "" | バインドプロパティ名 | | Format | string | "" | バインド時のフォーマット | | Font | string または FontPath[] | DefaultFont | フォント、配列指定時は[フォールバックフォント](#フォント)となる | | Size | number | 必須 | 文字サイズ | | Alignment | string | Start | 文字寄せ方向、Start、Center、Endのいずれか指定 | | Style | string | None | [文字スタイル](#文字スタイル) | | Width | number | 0 | テキスト幅 | | Height | number | 0 | テキスト高さ | | Color | string | | 文字色 | | SummaryType | string | Summary | サマリータイプ | | SummaryMethod | string | Group | サマリー方法、SummaryTypeがPageCountの場合のみ初期値がPageになる | | BreakKey | string | "" | ブレークキーが変更あったタイミングでサマリーをクリアする | | Culture | string | DefaultCulture | フォーマット時のCultureInfo | SummaryTypeは集計方法などを指定する。 | 名前 | 説明 | |-------------|------------------| | Summary | 合計 | | Count | カウント | | Average | 平均 | | Maximum | 最大値 | | Minimum | 最小値 | | PageCount | ページ数カウント | SummaryMethodはサマリー方法の範囲を指定する。 Incrementalとついたものは集計の途中結果を表示する。 FooterSectionが毎ページ表示される設定になっている場合にGroupIncrementalを指定すれば表示位置までのセクション計が表示される。 | 名前 | 説明 | |-----------------------------|----------------------------------------------------------| | Page | ページ内計(セクション毎にリセットされる) | | PageIncremental | ページ内計(セクション毎にリセットされる)、集計途中結果 | | CrossSectionPage | ページ内計(セクション毎にリセットされない) | | CrossSectionPageIncremental | ページ内計(セクション毎にリセットされない)、集計途中結果 | | Group | セクション計 | | GroupIncremental | セクション計、集計途中結果 | | All | 全ページ計 | | AllIncremental | 全ページ計、集計途中結果 | * LineElement、CrossSectionLineElement: 直線を表示する。 | 名前 | タイプ | 初期値 | 説明 | |-----------|--------|--------|----------| | Width | number | 0 | 幅 | | Height | number | 0 | 高さ | | Color | string | | 色 | | LineWidth | number | 1 | 線の太さ | CrossSectionLineElementはHeaderSectionに配置して、セクションの高さを超えるように設定すると、ペアとなるTotalSection、FooterSectionまで貫通する。 TotalSection、FooterSectionが表示されない場合は最後のDetailSectionまで貫通する。 * RectangleElement、CrossSectionRectangleElement: 四角形を表示する。 | 名前 | タイプ | 初期値 | 説明 | |-----------|--------|--------|----------| | Width | number | 0 | 幅 | | Height | number | 0 | 高さ | | Color | string | | 色 | | LineWidth | number | 1 | 線の太さ | CrossSectionRectangleElementはHeaderSectionに配置して、セクションの高さを超えるように設定すると、ペアとなるTotalSection、FooterSectionまで貫通する。 * FillRectangleElement、CrossSectionFillRectangleElement: 塗りつぶした四角形を表示する。 | 名前 | タイプ | 初期値 | 説明 | |-----------|--------|--------|----------| | Width | number | 0 | 幅 | | Height | number | 0 | 高さ | | LineColor | string | | 線の色 | | FillColor | string | | 背景色 | | LineWidth | number | 1 | 線の太さ | CrossSectionFillRectangleElementはHeaderSectionに配置して、セクションの高さを超えるように設定すると、ペアとなるTotalSection、FooterSectionまで貫通する。 TotalSection、FooterSectionが表示されない場合は最後のDetailSectionまで貫通する。 * ImageElement: 画像を表示する。 | 名前 | タイプ | 初期値 | 説明 | |------------|--------|--------|----------------------| | Path | string | "" | 画像ファイルパス | | Bind | string | "" | バインドプロパティ名 | | ZoomWidth | float | 1.0 | 幅拡大率 | | ZoomHeight | float | 1.0 | 高さ拡大率 | PathかBindのどちらかは指定しないといけない。 ### 文字スタイル 文字スタイルは下記からなる。 複数指定時は `Underline | Border` のように指定する。 | 名前 | 説明 | |---------------------|------------------------------------------------------| | None | スタイルなし | | Underline | 下線(ベースラインに下線が引かれる) | | DoubleUnderline | 二重下線(ベースラインに二重下線が引かれる) | | BorderTop | 上枠線 | | BorderLeft | 左枠線 | | BorderRight | 右枠線 | | BorderBottom | 下枠線 | | Strikethrough | 取り消し線 | | DoubleStrikethrough | 二重取り消し線 | | ShrinkToFit | Widthの範囲で縮小して表示 | | Clipping | WidthとHeightの範囲で切り抜く | | Stroke | フォントをPDFの直線や3次ベジェ曲線に変換して描画する | | Border | 上下左右の枠線 | Border系はWidth、Heightの指定がないと文字に合わせて自動設定される。 Width、Heightの指定がある場合は文字によらずWidth、Heightを優先する。 ShrinkToFit、Clippingの指定がない場合は文字が枠線をはみ出す。 Underline系は常にWidthを無視する。 これはAlignmentを指定した場合に、文字寄せ方向によらず下線を引くためである。 ## フォント フォントは登録済みフォント名を指定する方法とフォントファイル名を指定する方法がある。 OS標準インストールのフォント名が指定できる。(FontRegisterを独自指定している場合はその限りではない) フォントファイルは.TTF、.OTFはファイル名そのままで構わない。 フォントファイルに.TTCのように複数フォントを指定する場合はファイル名の後に `,0` や `,1` のように使用したいフォントのインデックスをつける必要がある。 フォントをPDFに埋め込むかどうかはPath、Embedで指定する。 ``` { "DefaultFont": "/usr/share/fonts/NotoSansJP-VariableFont_wght.ttf", // TTF形式の場合 "DefaultFont": "/usr/share/fonts/NotoSansCJK-Regular.ttc,0", // TTCフォントのインデックス0を指定する場合 "DefaultFont": "/usr/share/fonts/NotoSansCJK-Regular.ttc,1", // TTCフォントのインデックス1を指定する場合 "DefaultFont": {"Path": "NotoSansJP-VariableFont_wght.ttf", "Embed": "PossibleEmbed"}, // Embedを指定する場合 } ``` Embedでフォントの埋め込み要否を指定する。 | 名前 | 説明 | |---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | NotEmbed | フォントを埋め込まない | | PossibleEmbed | [OS/2のfsType](https://learn.microsoft.com/ja-jp/typography/opentype/spec/os2#fstype){:target="_blank"}で埋め込み可能ならPDFにフォントを埋め込む | | ForceEmbed | [OS/2のfsType](https://learn.microsoft.com/ja-jp/typography/opentype/spec/os2#fstype){:target="_blank"}を無視してPDFにフォントを埋め込む、利用者がライセンスを管理すること | | Stroke | フォントをPDFの直線や3次ベジェ曲線に変換して描画する | フォントにグリフが存在しない場合はフォールバックフォントを調べる。 Element系にFont指定があると優先的に調べ、その後DefaultFontを調べる。 TextElementがフォントを探す順番は `Font1→Font2→Font3→Font4` である。 BindElementがフォントを探す順番は `Font5→Font3→Font4` である。 SummaryElementがフォントを探す順番は `Font3→Font4` である。 どのフォントにもグリフがないと最初のフォントの[GID=0(.notdef)](OpenTypeフォント抽出#フォントの構造)が表示される。 ``` { "DefaultFont": ["Font3", "Font4"], "Sections": [ {"Type": "HeaderSection", "Name": "PageHeader", "Height": 50, "Elements": [ {"Type": "TextElement", "Text": "Foo", "Size": 30, "X": 10, "Y": 0, "Font": ["Font1", "Font2"]}, {"Type": "BindElement", "Bind": "Bar", "Size": 30, "X": 10, "Y": 0, "Font": "Font5"}, {"Type": "SummaryElement", "Bind": "Baz", "Size": 30, "X": 10, "Y": 0}, ]}, ], } ```