-
Notifications
You must be signed in to change notification settings - Fork 6
Closed
Labels
rfcConcept for new featureConcept for new feature
Description
これは v1.0 における 機能の実装コンセプト であり、この内容を基にユーザからのフィードバックを得てよりよい仕様を議論し、
導き出すことが目的。コメント欄での議論により、内容は適宜更新される。また、技術的な制約など、実際の機能が必ずしもコンセプト通りになるとは限らない。
Summary
- 現在のレイアウト形式(単票レイアウトと呼ぶ)とは別に用意する新しいレイアウト形式
- セクションレイアウトと呼ぶ
- 新規作成時にレイアウトフォーマットが 単票 or セクション かを選択することができる
Why?
- 現在のレイアウトフォーマットは「単票フォーマット」と言える
- レイアウト定義時点で用紙の高さによる制約がある
- この仕様で、一覧表などの動的なレイアウトを実現しようとすると現状リストツールを使うわけだが、高さが固定されているレイアウトの中で高さが動的に決まる結果を実現しようとしているため、Generator 自体の実装も、これを使った PDF 出力処理もかなり複雑になってしまう
- これを解決するために、レイアウト定義時点でページの制約をなくし、出力した結果によってページを決めるレイアウトフォーマットを新たに用意し、用途によって「単票フォーマット(現状)」「セクションフォーマット」を選択できるようにしてはどうか
Features
- セクションを定義し、それらを組み合わせて出力する
- セクションには、ヘッダー/繰り返し行/フッターがある
- ヘッダー/フッターは [最初のページに表示する]/[毎ページ表示する] を制御できる
- 繰り返し行は複数定義できる
- レイアウト定義時のページ幅は選択した用紙幅になる
- レイアウト定義時のページの高さはないが、出力したページの高さは用紙の高さになる
- 描画した結果、ページの高さから溢れる場合は自動的に改ページされる
Section
Header Section
- ページの先頭に表示されるセクション。繰り返し行の前に表示される
- 設定によって [最初のページのみ][毎ページ] を設定することができる
- id をつけて複数定義できる
Property
| Property | Default | Description |
|---|---|---|
| 表示 | true | 表示するかどうか |
| 高さ | -- | セクションの高さを px/mm で設定する |
| 表示位置 | 毎ページ | [毎ページ] または [最初のページのみ] 表示するかを設定する |
| id | Empty | ruby から操作する際の id |
Footer Section
- ページの末尾に追加されるセクション。繰り返し行の後に表示される
- 設定によって [最後のページのみ][毎ページ] を設定することができる
- id をつけて複数定義できる
Property
| Property | Default | Description |
|---|---|---|
| 表示 | true | 表示するかどうか |
| 高さ | -- | セクションの高さを px/mm で設定する |
| 表示位置 | 毎ページ | [毎ページ] または [最後のページのみ] 表示するかを設定する |
| 下部に固定 | false | 下部に固定するかどうか |
| id | Empty | ruby から操作する際の id |
Detail Section
- ヘッダーの後に追加されるセクション
- id をつけて複数定義できる
Property
| Property | Default | Description |
|---|---|---|
| 高さ | -- | セクションの高さを px/mm で設定する |
| 自動拡張 | false | 内容に応じて高さを拡張する |
| id | "default" | ruby から操作する際の id。 "default" の場合は id を省略できる |
- 表示設定はできない
Rendering Order
セクションは以下の順序で描画される。
- ヘッダーセクション
- 繰り返しセクション
- フッターセクション
ヘッダー/フッターは自動的に描画される。その描画順序は定義順となる。
Concept for Editor
新規作成時のレイアウトフォーマット選択
セクションレイアウトフォーマット
- セクションの並び順は左の [=] をドラッグして変更できるが、ヘッダー・繰り返し行・フッターという順序を超えることはできない
- セクションは右の [+] によって、同じ種類のセクションを追加することができる
- 右端の [x] によって、セクションを削除することができるが、ヘッダー・繰り返し行・フッターそれぞれ最後の一つは削除することができない
Concept for API
require 'thinreports'
report_params = {
type: :section,
layout: '/path/to/section_layout.tlf',
params: {
start_page_number: 1,
groups: [
{
headers: {
default: {
items: {
no: estimate.no
}
},
estimate_header: {
items: {
user_name: user.name,
total_price: estimate.total_price,
logo: user.logo.path,
stamp: estimate.stamp.path
}
},
foo: {
enabled: true
}
},
details: [
{
id: :default,
items: {
no: 11,
name: { value: 'hoge', style: { color: 'red' } },
price: 1000
}
},
{
id: :total,
items: {
price: { value: 'hoge', display: false }
}
}
],
footers: {
sub_footer: {
no: estimate.no
}
}
}
]
}
}
Thinreports.generate(report_params, filename: 'foo.tlf')Layout Schema
{
"version": "0.0.0",
"title": "Report Title",
"report": {
"paper-type": "A4",
"width": 0.0,
"height": 0.0,
"orientation": "landscape",
"margin": [0.0, 0.0, 0.0, 0.0]
},
"state": {
"layout-guides": [
{ "type": "x", "position": 0.0 }
]
},
"sections": [
{
"id": "hoge",
"type": "header",
"height": 100.0,
"display": true, # for header and footer
"every-page": true, # for header
"fixed-bottom": true, # for footer
"auto-expand": true, # for detail
"items": [
{ "type": "rect", "x": 100.0, "y": <relative x position>,... }
]
}
]
}
セクションプロパティの仕様
https://docs.google.com/spreadsheets/d/1Qo1yLt5zIgM1uFc9zHcswhd36e8GaLakOFtpKlZbObc/edit#gid=0
Limitation
- List is not supported
- 作成後の通常/セクションフォーマットの切り替えはできない
やらないこと
- セクションの表示/非表示の動的切り替え
Editor
- セクションの並び替え
- セクションの使う/使わないの切り替え(item がなければ保存しない)
- フッターの下部固定表示のOn/Offで表示を変えない
Note
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
rfcConcept for new featureConcept for new feature

