跳至主要内容

報表排版推薦起點

report-default revision 1 是新報表專案可直接複製的完整起點,適用於繁體中文/英文的 flow 報表。文件基底參考本工作區 appfuse-server 4.0.0-alpha.27,再補上所有區塊角色;這是推薦 profile 的固定版次,不隨套件升級變動。既有專案補建時保存已採用值,不以此範本替換舊版面。

共用規範的權威格式見 規格範本:報表共用排版規範,繼承與驗收流程見 報表規格指南。

完整有效值:styles.json。展示:兩頁 HTML 樣張。原檔在 static/reports/style-samples/report-default-v1/;JSON 是此推薦 profile 的數值快照,以下各表是其閱讀摘要。它不是框架可直接載入的設定格式;專案範本需建構公開 API。

複製與歷史版本​

複製完整值至 docs/design/report-styles/{styleId}/rev-1.json,依權威範本建立 rev-1.md,改為專案自己的 ID,記錄推薦來源 report-default@1、實際已安裝框架版本及字型摘要。採用不同值時先完成專案草稿與 HTML 確認。文件只引用該版的 JSON,不引用框架最新版。

已採用的版次保留不動。修訂時新增 rev-2.md/rev-2.json 與必要資產,RPT 明確切換 report_style_id、report_style_revision、report_style_source 與 depends_on;舊 RPT 保持引用 rev-1.md。樣式版次是正整數,獨立於 RPT 的 revision、文檔生命週期 version 與框架套件版本。索引或 latest 只供導覽。

字型映射與取得​

所有角色使用邏輯家族 sans;一般與粗體均提供實際字面,禁止瀏覽器合成粗體。順序為拉丁字型 → 繁體中文字型;HTML 的 ReportLatin, ReportTC 與 ReportFonts 的 fallback 鏈相同。完整原始檔 URL、固定來源版次與每檔 SHA-256 見 font-assets.json,不能改成未固定的最新下載。

字面第 1 個檔案第 2 個檔案處理
regular / 400NotoSans-Regular.ttfNotoSansTC-Regular.ttf原始靜態 TrueType 檔
bold / 700NotoSans-Bold.ttfNotoSansTC-Bold.ttf原始靜態 TrueType 檔
italic/bold italic不啟用不啟用推薦 profile 所有角色 italic=false;需求新增斜體時另訂字面與驗證,不默認合成

隨包保存 Noto Sans 授權 與 Noto Sans TC 授權,兩者檔案均載明 SIL OFL 1.1;採用/散佈時保留原始授權與著作權聲明,修改字型須核對原檔的保留名稱與條件。本範例不修改、子集化或重新命名字型。

缺字時 renderer 會替換 U+25A1;必需字元缺字屬驗收失敗,須明確新增 fallback 並修訂樣式,不能靠執行機器字型補齊。瀏覽器字型 fallback/換行仍需與 PDF 對照,載入成功不代表所有字元已驗證。

字型二進位檔與框架測試相同,採固定 URL+摘要準備於本機,不納入 Git;授權、manifest、CSS、JSON 及準備腳本納入版控。啟動 Docusaurus 前,從 docs 模組執行:

python3 static/reports/style-samples/report-default-v1/prepare-fonts.py

已有固定字型快取時可加 --cache-dir /path/to/appfuse-report-fonts;腳本逐檔核對摘要,缺檔才下載。服務啟動後 HTML 僅存取同包相對 URL,沒有 CDN 或網路字型請求。實際 RPT 版面包仍須保存本輪字型 bytes 或受控且可取回的資產快照,將摘要納入證據;這個推薦展示的準備腳本不取代 RPT 資產保存契約。

全部區塊的推薦值​

字級以 pt;行高是字級倍數;其他長度以 mm。表中間距保留 pt 原值方便核對,JSON 保存 pt × 25.4 / 72 的 mm 值,四捨五入至 9 位小數。0 也是明確值。

所有角色完整共用值:family=sans、italic=false、文字色 #1f2328、首行縮排 0 mm、orphans/widows 各 2。這些是本版 profile 的固定值;完整 JSON 已逐角色展開,沒有框架繼承。左右/數值欄位覆寫另由 RPT 指定。

角色字級 pt字重行高段前/段後 mm(pt)對齊keepWithNext
report-title14bold1.40/2.116667(0/6)lefttrue
section-heading12bold1.44.233333/2.116667(12/6)lefttrue
metadata(標籤與值相同)9regular1.40/2.116667(0/6)leftfalse
body10.5regular1.750/2.963333(0/8.4)leftfalse
table-header9bold1.750/0leftfalse
table-body9regular1.750/0leftfalse
table-group-header9bold1.750/0leftfalse
table-subtotal9bold1.750/0leftfalse
table-total9bold1.750/0leftfalse
note8.5regular1.40/2.963333(0/8.4)leftfalse
page-header10.5regular1.750/0(區域不使用段距)left/center/right slotfalse(區域不使用)
page-footer10.5regular1.750/0(區域不使用段距)left/center/right slotfalse(區域不使用)
figure-caption8.925regular1.750/0(圖說不使用段距)centerfalse(圖說不使用)

所有表格角色:四邊內距各 1.234722 mm(3.5 pt)、垂直靠上、列高由內容自動撐高,不縮字、不固定列高;底線 0.105833 mm(0.3 pt)、色 #c9cdd2,其餘三邊不畫。表頭底色 #e8ecf1、明細無填色、群組標題 #f3f6f9、小計與合計皆 #dde3ea。非表格角色的儲存格/列高欄為不適用。頁首尾高度是三個 slot 明確換行後最大行高總和,不是任意可設的高度。

文件基底與 API 映射​

完整 DocumentStyles 用建構子建立:text 與 paragraph.text 都填入上述 body 的完整文字樣式;paragraph 包含全部分頁及間距值。不得從每次執行的 standard()/builder() 只覆寫部分值。專案自己的完整已凍結物件可作合併基底。

  • headings 1–4:14/12/11/10.5 pt、bold、行高 1.4、段前 4.233333 mm(12 pt)、段後 2.116667 mm(6 pt)、left、keepWithNext=true;其餘文字/縮排/orphans/widows 與本版共用值相同。主標題角色另用節點樣式,段前為 0。
  • table:完整 TextStyle 是 sans/9 pt/regular/false/#1f2328;其他填色、rule、padding 如上,續接標籤 {group}(續),cellBorders=CellBorders.none() 明確不追加四邊框線;列底線仍由 table.rule 繪製。
  • box:border 0.211667 mm(0.6 pt)/#c9cdd2、fill #f3f6f9、等距 padding 3.527778 mm(10 pt)。
角色公開 API 落點(大寫名稱是專案自行建立的完整樣式常數)
report-titleParagraph 建構子的 style 參數=REPORT_TITLE;不是額外的 DocumentStyles 欄位
section-headingDocumentStyles.headings[2]+Heading level 2;其他層級用明確 heading 變體
metadataParagraph 建構子的 style 參數=METADATA;標籤與值若需差異用明確 Inline TextStyle
bodyDocumentStyles.text/paragraph+Paragraph 建構子的 style 參數=BODY
table-headerTable.headerRows(明確表頭列)+DocumentStyles.table+儲存格 Paragraph 建構子的 style 參數=TABLE_HEADER
table-bodyRowRole.DETAIL+儲存格 Paragraph 建構子的 style 參數=TABLE_BODY
table-group-headerRowRole.GROUP_HEADER+儲存格 Paragraph 建構子的 style 參數=TABLE_GROUP_HEADER
table-subtotalRowRole.GROUP_FOOTER+儲存格 Paragraph 建構子的 style 參數=TABLE_SUBTOTAL
table-totalRowRole.TOTAL+儲存格 Paragraph 建構子的 style 參數=TABLE_TOTAL
noteParagraph 建構子的 style 參數=NOTE
page-header/page-footerPageRegion left/center/right 行內內容;段落沿用完整文件基底,行內 TextStyle 可改文字屬性
figure-captionFigure/Image.caption 純文字;目前從文件段落衍生,沒有獨立 ParagraphStyle 參數

表格儲存格的完整 ParagraphStyle 最後覆寫列角色預設,含明確字重與行高;一般字重不可因 false/regular/0 被誤判成未設定。表格數值欄靠右時記錄為 RPT 欄位覆寫。小計/總計可以覆寫各自文字與 TableRowStyle 框線/padding;底色仍共用 table.totalFill,不宣稱可各自改色。

間距合成與不可獨立設定項目​

相鄰區塊採「上一區塊段後+下一區塊段前」相加,HTML 用 padding/明確間距避免 margin collapse。頁面內容頂端不計段前;段落分頁後不重加段前。表格內單段落不計段前後,儲存格若有多個段落則依公開 API 的內部段距合成。表格、圖形與 KeepTogether 區塊之後固定使用本版文件段後 2.963333 mm(8.4 pt);沒有額外 spacer。頁首尾 gap 及圖說 gap 分開記錄,不和段距混用。

以下依上述框架版本的 source 核對;列的是現有限制及衍生規則,記錄不等於 API 已可設定。專案複製後須記錄其實際版本的值;升級時讀新 source/發布契約並核對合成 PDF 的長文、表格、圖說、頁首尾與跨頁。值改變且影響採用版面時處理相容性,或明確修訂契約與接受;無法達成必要值則列能力缺口。

項目當時值/規則source(appfuse-server/src/main/java/io/leandev/appfuse/report/)設定能力與升級檢查
頁首尾與內容距離2.116667 mm(6 pt)internal/layout/RegionLayout.GAP無獨立 API;比對常數與位置
頁首尾段落與高度文件 paragraph;三區 slot、明確 LineBreak,最大行高總和,無自動換行PageRegion、internal/layout/RegionLayout無獨立 ParagraphStyle/高度;行內字級可覆寫,行高仍從文件;檢查寬度及截斷診斷
頁首尾分隔線DocumentStyles.box.border(本版 0.6 pt)internal/layout/LayoutEngine、RegionLayout可用 box.border 一起設定,無獨立線樣式
圖形與圖說距離1.411111 mm(4 pt)internal/layout/GraphicLayout.CAPTION_GAP無獨立 API;比對常數
圖說樣式文件字級 × 0.85=8.925 pt、center,其餘沿用文件段落internal/layout/GraphicLayout無獨立 caption style;比對衍生規則及換行
非明細列字重表頭及非 DETAIL 預設 bold,然後套儲存格/行內覆寫internal/StyleResolver.cellParagraph可用完整節點樣式覆寫,不是不可改的強制值;核對優先順序與實際有效值
小計/總計底色GROUP_FOOTER/TOTAL 共用 table.totalFillinternal/layout/TablePlacer.fill整表可改,無獨立 row fill;個別底色需求列缺口
區塊段後/頁面段前表格/圖形/KeepTogether 用文件 spaceAfter;頁面頂端省略段前internal/layout/LayoutEngine可改共同文件段後,無各區塊獨立 after API;核對合成與分頁

固定行高、非等距 cell padding、固定頁首尾高度或獨立圖說樣式不屬此 profile 已支援的推薦能力。fixed 報表須另訂對位契約及能力對照。

展示與驗收界線​

HTML 樣張展示全部 13 個角色、heading 1–4、一般/粗體、中文/英文長文、多行表格、群組小計與整份合計、區塊框、圖說及兩頁頁首尾;樣張欄位對齊覆寫明示在合成內容。紙張 A4/16 mm 頁邊距只供展示,不是所有 RPT 的預設紙張契約。

這是靜態推薦展示,沒有 RPT、HTML 接受帳本或 PDF 接受。本輪未交付對應 Java 範本與 renderer PDF 樣張;瀏覽器換行、頁首尾留區與列印分頁也不構成 PDF 證據。已知 API 限制以當時實際值呈現;需求若需獨立改值須先補 API 或調整契約。專案採用後,仍按 /report 流程實作並驗證 PDF;PDF 證據及真人接受不可由這份 HTML 展示承接。