問:在 Genero Report Writer(GRW)中,如果我沒有為報表物件指定任何字型屬性,系統會套用哪些預設值?

作者提到,版本 6.00 和 5.01 將會有相關的功能改進,屆時會補充說明。

一、繼承機制

GRW 的字型屬性採用繼承機制:字型值會從子物件向上繼承父物件。如果在某一層級未定義字型,系統會往上查找父物件、祖父物件,依此類推。如果整個物件層級都沒有定義字型值,則套用作業系統的預設值。

這意味著,只要在最頂層的 PageRoot(根節點)設定字型,其下所有子物件都會繼承這個字型,除非子物件有自己的字型設定。

二、多機器環境的字型問題

在 GRW 的報表生成流程中,最多有三台機器參與:

  1. 設計者的開發機器(設計報表)
  2. 執行 Genero Report Engine 的伺服器(產生報表)
  3. 最終檢視報表的用戶端機器

無法保設計者機器上有的字型,在 Report Engine 伺服器或用戶端上也一定存在。這是跨機器部署時常見的字型問題根源。

三、備用字型(Fallback Fonts)

當 GRW 遇到無法取得的字型時,Java 執行環境會自動替換為已設定的備用字型(fallback font)。在較新版本的 GRW 中,備用字型的使用情況會顯示在除錯輸出中,方便排查問題。

相關文件:備用字型設定GREDEBUG 除錯

設計建議

  • 在各報表中建立一致的字型標準,避免不同報表字型不統一。
  • 部署時在 Genero Report Engine 伺服器上安裝所需字型
  • 將報表元素組織到 Layout NodeMiniPage 物件中,充分利用繼承機制。
  • 了解 fidelity 屬性——此模式會以圖片形式渲染報表而非文字,可確保字型顯示一致,但會增加輸出檔案大小。
  • 考慮將字型嵌入報表輸出中,以保證在所有環境都能正確顯示。

現有報表的快速解決方案

如果你已有大量現有的 .4rp 報表檔案,想要統一設定字型,有兩種方式:

手動方式

讓初級開發人員逐一開啟每個 .4rp 檔案,在 PageRoot 節點上填入 fontNamefontSize 屬性。

自動化方式

由於 .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