開發與維運

Linux服務器JRE中文字體設置,解決java.awt亂碼、顯示方塊問題

最近因為需要在java應用中合成曲線圖,使用了jfreechart庫,但是發現圖片中的中文全都顯示成方塊了。
根據網絡上的經驗,在創建圖表之前,先設置主題ChartFactory.setChartTheme(standardChartTheme);
或者設置字體時用setFont(Font font),發現也不能解決問題。
後來意識到是服務器本身缺少中文字體的問題,Linux機器一般都是沒有中文字體的,所以在使用java.awt相關類生成圖片時,輸出的中文很可能顯示亂碼或者呈方塊狀。解決方案就是在服務器啟動腳本里,加上安裝中文字體的步驟:

  1. 安裝字體到系統中。
  2. 在JRE目錄下創建fonts/callback目錄。
  3. 將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

這裡可以選擇任意開源中文字體,我用了文泉譯測試。

驗證:

  1. 在改動之前先登錄機器,進入目錄/usr/share/fonts,可以看到下面只有dejavu字體庫。
  2. 在docker腳本中添加上述命令後,重新部署到服務器上,該目錄下多了字體庫wqy-microhei 和 wqy-zenhei。
  3. 這時再觸發生成圖片的服務,中文正常顯示。

屏幕快照 2020-03-17 15.56.26.png

Leave a Reply

Your email address will not be published. Required fields are marked *