問:在 Genero Report Writer(GRW)中,如果我沒有為報表物件指定任何字型屬性,系統會套用哪些預設值?
作者提到,版本 6.00 和 5.01 將會有相關的功能改進,屆時會補充說明。
一、繼承機制
GRW 的字型屬性採用繼承機制:字型值會從子物件向上繼承父物件。如果在某一層級未定義字型,系統會往上查找父物件、祖父物件,依此類推。如果整個物件層級都沒有定義字型值,則套用作業系統的預設值。
這意味著,只要在最頂層的 PageRoot(根節點)設定字型,其下所有子物件都會繼承這個字型,除非子物件有自己的字型設定。
二、多機器環境的字型問題
在 GRW 的報表生成流程中,最多有三台機器參與:
- 設計者的開發機器(設計報表)
- 執行 Genero Report Engine 的伺服器(產生報表)
- 最終檢視報表的用戶端機器
無法保設計者機器上有的字型,在 Report Engine 伺服器或用戶端上也一定存在。這是跨機器部署時常見的字型問題根源。
三、備用字型(Fallback Fonts)
當 GRW 遇到無法取得的字型時,Java 執行環境會自動替換為已設定的備用字型(fallback font)。在較新版本的 GRW 中,備用字型的使用情況會顯示在除錯輸出中,方便排查問題。
相關文件:備用字型設定、GREDEBUG 除錯
設計建議
- 在各報表中建立一致的字型標準,避免不同報表字型不統一。
- 部署時在 Genero Report Engine 伺服器上安裝所需字型。
- 將報表元素組織到 Layout Node 或 MiniPage 物件中,充分利用繼承機制。
- 了解
fidelity屬性——此模式會以圖片形式渲染報表而非文字,可確保字型顯示一致,但會增加輸出檔案大小。 - 考慮將字型嵌入報表輸出中,以保證在所有環境都能正確顯示。
現有報表的快速解決方案
如果你已有大量現有的 .4rp 報表檔案,想要統一設定字型,有兩種方式:
手動方式
讓初級開發人員逐一開啟每個 .4rp 檔案,在 PageRoot 節點上填入 fontName 和 fontSize 屬性。
自動化方式
由於 .4rp 檔案本質上是 XML 格式,可以直接用程式修改 XML 來批次套用字型設定。範例轉換:
<!-- 修改前 -->
<MINIPAGE name="PageRoot" width="max" length="max">
<!-- 修改後 -->
<MINIPAGE name="PageRoot" width="max" length="max" fontName="Arial" fontSize="12">
進階開發人員可以撰寫 .4gl 程式來批次驗證或自動填入這些屬性,一次處理整個報表資料夾。
相關文件連結
原文:https://4js.com/ask-reuben/ig-304/
· 有任何 Genero 技術問題或翻譯疑問,歡迎來信
support@t100.app