JFreeChart在linux下生成图表时中文乱码
JFreeChart在linux下生成图表时中文乱码,原因是JRE没有找到对应中文字库,解决方法如下:
解决方法1:
1.确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf
2. 在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
3. 确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
4. 确认/usr/share /fonts/zh_CN/TrueType目录下存在zysong.ttf
5. 在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
6. 重启resin服务器OK.
解决方法2:
1.将zysong.ttf复制到Java安装目录/jre/lib/fonts
2.修改Java安装目录 %JavaHome%/jre/lib/fonts下的font.ttf文件
修改首行的数字(数字+1)
在最后一行添加zysong.ttf -misc-zysong--medium-r-normal--0-0-0-0-c-0-GB18030
3. 将%JavaHome%/jre/lib/fontconfig.RedHat.3.properties.src文件,更名为fontconfig.properties;
4. 建立/usr/share/fonts/zh_CN/TrueType文件夹,拷贝zysong.ttf至该文件夹下.
5. 重启resin服务器OK.
使用这个小程序来测试某个环境下JRE是否支持中文,如下:
package test;
public class ImageTester {
public static void generate(String fileName) throws Exception {
BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
String fontType = "宋体";
g.setFont(new Font(fontType , Font.BOLD, 22));
g.drawString("你好我好", 30, 30);
g.drawString("\u5b8b\u4f53", 30, 80);
ImageIO.write(image, "JPEG", new FileOutputStream(new File(fileName)));
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
generate(args[0]);
}
}
linux下运行时这样运行:
java test.ImageTetser /home/test.png
附件提供:zysong.ttf文件