PicoPDF

設定フォーマット 🔗

PicoPDFではデータをPDF変換するためにJSONフォーマットの設定ファイルを利用する。
設定ファイルの内容について説明する。

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へ変換情報で指定されたセクション名の定義を行う。

名前 タイプ 初期値 説明
Type string 必須 HeaderSection、DetailSection、TotalSection、FooterSectionのいずれか指定
Name string 必須 セクション名、重複不可
Height number 必須 セクションの高さ
ViewMode string Type依存 Every、PageFirst、First、Lastのいずれか指定
PageBreak bool false 改ページ、trueの場合、印字後に改ページを行う
Elements Element[] 必須 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で指定した要素タイプに応じて設定できるプロパティが異なる。

文字スタイル 🔗

文字スタイルは下記からなる。
複数指定時は 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で埋め込み可能ならPDFにフォントを埋め込む
ForceEmbed OS/2のfsTypeを無視してPDFにフォントを埋め込む、利用者がライセンスを管理すること
Stroke フォントをPDFの直線や3次ベジェ曲線に変換して描画する

フォントにグリフが存在しない場合はフォールバックフォントを調べる。
Element系にFont指定があると優先的に調べ、その後DefaultFontを調べる。
TextElementがフォントを探す順番は Font1→Font2→Font3→Font4 である。
BindElementがフォントを探す順番は Font5→Font3→Font4 である。
SummaryElementがフォントを探す順番は Font3→Font4 である。
どのフォントにもグリフがないと最初のフォントのGID=0(.notdef)が表示される。

{
	"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},
		]},
	],
}