顯示具有 Reports 標籤的文章。 顯示所有文章
顯示具有 Reports 標籤的文章。 顯示所有文章

2021/07/15

FastReport 報表檔 FR3 在 D7 升級 XE 前必須要了解的資訊

我家產品自從 D7 升級成 XE 後,在開發時,報表從零到有還蠻輕鬆的,FR (FastReport) 的報表產生器所產出的 fr3 報表定義檔會自動存為 UTF8 格式。上線後,才發現之前存在 D7 裡的 fr3 在 XE 中在中文的地方會出現亂碼。

D7 所設計的 fr3



XE 讀取 D7 設計的 fr3



沒有什麼比轉一半更令人揪心

在遇到問題時,如果這問題有一致性,就像文字轉碼一樣,全是亂碼的還容易處理:找到編碼,轉換,收工。

但現在的情況是 FR 轉出的 fr3 檔,有部分正常,有部分亂碼,這關最難解!

災難中的小確幸,確定是編碼問題

D7 只支援 Ansi,所以轉出來的 fr3 無庸至疑的是 Ansi,從圖片可知是採繁體中文大 5 碼  (Big5) 代碼頁 (CodePage=950)。

既然知道是 Ansi,現在就可以來猜亂碼的地方是什麼編碼。




我還是直接公佈答案好了:


沒錯,就是 Ansi 的 UTF8 代碼頁 (CodePage=65001)!


難解之處就在二選一

從上圖可以知道當切換代碼頁時,原本能顯示中文的地方會變成亂碼,反之亦然。哼哼,FastReport 真有你的,硬是不出升級工具。官方沒準備,只好自己硬上。

fr3 是 XML 格式,但


Delphi 的 XML Mapper 是很實用的 XML 解析工具,但無奈 fr3 是一個特規,它無法順利解析 fr3 的內容。

 

先說結論

經過在漫長的奮鬥之路後,總算是做出一個像樣的結果:


該顯示中文的地方能順利顯示中文,格式也採 UTF8,尤其是 XE 開始支援 Unicode 後,Ansi 文字處理變得相對麻煩,【System.AnsiStrings 單元】會是過這關的最佳利器!


和你分享 ❤

See also


2012/10/04

FastReport 的 Variables 和 Script Variables


Variables 可在 Design 上看到變數
Script Variables 則看不到

Design script裡面使用上
是直接使用,例如:

Script Variables :
========
Delphi:
frxReport.Script.Varialbes['XXX'] := 'XYZ';

FR Design
ShowMessage(XXX);  // 雖然看不到,但可以直接使用
========

 Variables:
========
Delphi:
frxReport.Varialbes['XXX'] := '''XYZ''';

FR Design
ShowMessage(<XXX>);  // 在Design Manager可以看到,但設定和呼叫上就比較麻煩
========


參考來源:







YA! 又過一關囉!




FastReport4.x 在 XE XE2 下編譯失敗的問題

如果是買FastReport正式版的使用者,可能會遇到FastReport 4.x的Source編譯失敗的情況

其實是因為XE2它為了與FireMonkey相容的關係

所以會把uses的位置做了一些修改