java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术;
图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题;
如下方法可以解决该问题:
在项目中加入ttf字体文件;
代码中通过该字体文件创建Font对象;
通过该Font对象控制图表中文字样式,即可避免中文乱码,同时,避免项目移植引起的字体样式丢失;
还有另一种解决方案
给程序所在的Linux服务器安装相应的字体,这样就不需要在程序包中加入字体文件;
但,程序移植到其他服务器之后字体样式将丢失;
以下是从字体文件创建Font的代码:
private static java.io.File file = null;
private staticFont font=null;
private static void initFontFile() {
if (file == null) {
String vPath = ChartUtil.class.getClassLoader().getResource("").getPath();
vPath = vPath + File.separator + "fonts" + File.separator + "simhei.ttf";
file = new java.io.File(vPath);
}
}
private static Font getFont(int style, Float size) {
Font defFont = new Font("黑体", style, 12);
if(null !=font ) return;
try {
initFontFile();
if (file == null || !file.exists()) {
return defFont;
}
java.io.FileInputStream fi = new java.io.FileInputStream(file);
font = Font.createFont(Font.TRUETYPE_FONT, fi);
fi.close();
// 这一句需要注意
// Font.deriveFont() 方法用来创建一个新的字体对象
font= font.deriveFont(style, size);
return font;
} catch (Exception e) {
}
return defFont;
}