最近因為需要在java應用中合成曲線圖,使用了jfreechart庫,但是發現圖片中的中文全都顯示成方塊了。
根據網絡上的經驗,在創建圖表之前,先設置主題ChartFactory.setChartTheme(standardChartTheme);
或者設置字體時用setFont(Font font),發現也不能解決問題。
後來意識到是服務器本身缺少中文字體的問題,Linux機器一般都是沒有中文字體的,所以在使用java.awt相關類生成圖片時,輸出的中文很可能顯示亂碼或者呈方塊狀。解決方案就是在服務器啟動腳本里,加上安裝中文字體的步驟:
- 安裝字體到系統中。
- 在JRE目錄下創建fonts/callback目錄。
- 將Linux系統的字體目錄作為JRE下面的字體目錄連接。
對應Docker命令:
# 安裝字體
RUN yum -y install wqy-microhei-fonts wqy-zenhei-fonts
RUN mkdir -p /opt/xxx/java/jre/lib/fonts/fallback
RUN ln -s /usr/share/fonts /opt/xxx/java/jre/lib/fonts/fallback
這裡可以選擇任意開源中文字體,我用了文泉譯測試。
驗證:
- 在改動之前先登錄機器,進入目錄/usr/share/fonts,可以看到下面只有dejavu字體庫。
- 在docker腳本中添加上述命令後,重新部署到服務器上,該目錄下多了字體庫wqy-microhei 和 wqy-zenhei。
- 這時再觸發生成圖片的服務,中文正常顯示。