一、概述
1
問題描述。
使用者在列印、匯出時,會出現與預覽結果不一緻的情況。如:
①在 Linux 環境下,發現用戶端預覽是正常的,但是在匯出或列印時會出現亂碼,或者一些特殊符號如人民幣符號【¥】,在匯出或列印時變成了美元符號【$】;
②在 Linux 系統的用戶端,預覽或匯出的圖片亂碼;
③Linux 下列印預視,有重影;
④Linux 伺服器匯出文字重疊;
⑤匯出 pdf 時圖表裏的中文變成框框;
⑥本來設定的字體是微軟雅黑,但是匯出來的 PDF 卻是宋體;
⑦插入斜線亂碼,斜線為方框。在本地設計器工程下預覽字體正常,儲存在伺服器上,透過伺服器預覽時,效果和設計器工程預覽不一緻。
在 Linux 系統中出現報表斜線丟失。
Linux 系統中,在主報表中插入子報表,如果子報表有中文,那麼在主報表中顯示的時候會出現中文亂碼,但主報表其他部分或者子報表單獨存取的時候中文並不會亂碼。
2
原因分析。
用戶端匯出或者列印時,字體使用的是伺服器的系統字體和伺服器依賴的 JRE 下的字體,若伺服器沒有設計器設計時選用的字體,則會出現亂碼或者字體被更換的問題。
設計器設計報表時,使用的是設計器所在裝置本地系統的字體,儲存在伺服器上後,若伺服器沒有設計器設計時選用的字體,則會出現預覽不一緻的問題。
對於 Linux 系統 Java 在 drawString 的時候,可能會沒有對應的字體,此時就會出現斜線丟失的情況。
在使用插入子報表時,實際上是在伺服器端事先畫好圖片,當用戶端發出請求存取主報表時,再去呼叫已畫好的圖片。當插入的子報表中含有中文的時候會呼叫工件系統中的語言包,如果 Linux 中沒有安裝中文語言包會導緻出現亂碼現象。
3
解決思路。
伺服器安裝缺失的字體包。
注1:伺服器安裝後,如果要在用戶端瀏覽器預覽時也顯示出字體效果,用戶端系統也必須安裝該字體。
注2:叢集環境下,需要在所有節點安裝缺失的字體。
二、確認缺失字體
查看有問題的字體部分,確認可能缺失的字體。例如缺失黑體,如下圖所示。
注:10.0.16 及之後的版本支援製作範本或預覽範本時對使用的字體進行檢查,如果不包含對應字體,會提示使用者缺失的字體。詳細內容可參考:字型缺失檢測。
三、Linux 系統如何安裝
1
檢查中文語言包。
檢查系統中是否有字體包 【zh_TW.UTF-8】 ,查看系統預設語言是否為 【zh_TW.UTF-8】 ,輸入指令:【locale -a | grep zh_TW】,如下圖所示。
若不是,安裝中文語言包以及設定系統預設語言的方法請參見:Linux 系統安裝中文語言包。
2
安裝缺失字體。
使用【 fc-list 】查看字體庫,如下圖1所示。若提示:【-bash: fc-list: command not found】,使用 【yum -y install fontconfig】語句後,再次查看字體庫。
在 【/usr/share/fonts】目錄下建立一個目錄 【chinese】,把本地 Windows 系統 【C:\Windows\Fonts】 中的字體,上傳到 【/usr/share/fonts/chinese】目錄下。例如上傳【Adobe 黑體 Std 標準】字體,如下圖2、圖3所示。
修改chinese檔案夾權限,輸入指令:【chmod -R 755 /usr/share/fonts/chinese】。如下圖4所示。
執行如下代碼塊所示命令。若執行 【mkfontscale】後,提示 【mkfontscale: command not found】,需執行該命令進行安裝:【yum install mkfontscale】。
執行命令:【fc-list | grep simhei.ttf】 ,查看是否安裝成功,如下圖5所示。
cd /usr/share/fonts/chinesemkfontscale #字體擴展。mkfontdir #新增字體目錄。fc-cache -fv #重新整理快取,或者執行。fc-cache /usr/share/fonts/chinese/fc-list #查看系統字體。
3
重啓工程。
字體安裝好後,重啓工程。預覽、匯出、列印時就會顯示出對應的字體。
四、Windows 系統如何安裝
1
确認缺失字體。
查看有問題的字體部分,确認可能缺失的字體。例如缺失黑體,如下圖所示。
10.0.16 及之後的版本支持制作模板或預覽模板時對使用的字體進行檢測,如果不包含對應字體,将提示設計者或者使用者,設計者或者使用者即可不用自己查找缺失的字體。詳細内容可參考:
2
安裝缺失字體.。
確認伺服器 【C:\Windows\Fonts】 檔案夾中沒有對應字體後,將下載的字體匯入到 【C:\Windows\Fonts】 檔案夾中,或者直接在系統的字體設定中安裝。若系統中沒有,直接在 【C:\Windows\Fonts】檔案夾中匯入字體。如下圖所示。
3
重啓工程。
字體安裝好後,重啓工程。預覽、匯出、列印時就會顯示處對應的字體。
注:字體安裝好後,若遇到讀取不到字體的情況,可以將字體copy到伺服器 【JDK_HOME/jre/lib/fonts】 目錄下,重啓工程所在的容器。