这两天因为要统计报表,就用到了jfreechart组件,因为是在windows下编程,所以一直都比较正常,可没想到一放到linux下就出现了乱码,所有的中文都是显示小方块,郁闷的很,然后google了下,网络上倒是有不少的解决方案,可一一试过以后发现都不行,仍旧是乱码,或许是因为环境不同导致配置无法生效,也或许是我配置有失误,总之试了很多都无法解决乱码的问题。再者网络上介绍的都是更改系统的字体,麻烦的很,而且有误操作的可能性,而且文章都比较旧了,视乎跟不上时代的节奏了。本着自我研究的精神,google了不少的方案后大致明白应该是JRE找不到指定的字体而导致的乱码,所以当然是从字体入手,首先是看看jfreechart默认是用什么字体的,查看如下代码:
System.out.println(jfreechart.getTitle().getFont().getFamily());
结果输出是:
SansSerif
很陌生的字体,既然这样,我们就可以设置自己想要的字体,比如设置柱状图的标题字体,可以如下代码:
jfreechart.getTitle().setFont(new Font("宋体", Font.BOLD, 22));
其他的诸如X,Y轴的名称、刻度和类别等文字的字体也可以一并进行设置,还是以柱状图为例子,
Font font = new Font("宋体", Font.BOLD, 22);
jfreechart.getTitle().setFont(font); // 标题
font = new Font("宋体", Font.PLAIN, 14);
jfreechart.getLegend().setItemFont(font); // 列类型的文字字体
font = new Font("宋体", Font.PLAIN, 16);
categoryaxis.setLabelFont(font); // x轴名称的字体
categoryplot.getRangeAxis().setLabelFont(font); // y轴名称的字体
CategoryPlot categoryplot = jfreechart.getCategoryPlot();
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
font = new Font("宋体", Font.PLAIN, 12);
categoryaxis.setTickLabelFont(font); // x轴上的刻度名称字体
categoryplot.getRangeAxis().setTickLabelFont(font); // y轴上的刻度名称字体
font = new Font("宋体", Font.PLAIN, 18);
categoryplot.setNoDataMessage(emptyMsg);
categoryplot.setNoDataMessageFont(font); // 没有数据时的提示
这样设置完毕后,我再在linux下运行就没有乱码问题了。我的环境是:Redhat4,Jdk6,jfreechart-1.0.0(这个版本中还没有Theme的概念)。
我的解决方法并没有修改linux或JRE的字体,当然前提应该还是linux下的JRE支持中文字体了,我们可以使用这个小程序来测试某个环境下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
当然了,这个解决方案不代表可以解决所有的乱码问题,而且也无法得到验证,仅仅是我在处理乱码过程中的一点心得,希望对大家有点用处:-)
分享到:
相关推荐
Linux下JFreechart中文乱码的解决.docx
JFreeChart在linux下生成图表时中文乱码,原因是JRE没有找到对应中文字库,解决方法如下:
NULL 博文链接:https://blueswind8306.iteye.com/blog/1194209
解决linux 下,jfreechart乱码
终极解决方案最简单,最直接的,已解决多台服务器java程序应用jfreechart生成图片,中文乱码问题
jfreechart linux乱码解决方案,比较完整。
linux 下 JFreeChart 乱码 (中文状态,十分怪异的小方块"口") 对应博客
NULL 博文链接:https://liujun58love.iteye.com/blog/1711390
本例中提供了JFreechart的jar包以及一个页面上生成饼图的示例,提供了linux下的中文乱码解决方法以及所需文件,希望对您有所帮助
NULL 博文链接:https://haiziwoainixx.iteye.com/blog/870154
JFreeChart-1.0.13原文件含jar包。 1、JFreeChart生成图片路径教程 2、JFreeChart使用教程(含下载安装,超详细) 3、JFreeChart使用详细教程 ...5、JFreeChart乱码解决方法 等等 包括许多优秀案例
zysong.ttf jfreechart 解决中文乱码 问题.zysong.ttf LInux字体库 .用于解决jfreechart在linux环境中的中文乱码问题
NULL 博文链接:https://love422619.iteye.com/blog/2383006
linux下JFreeChart生成的图片乱码,可以用这个字体
zysong.ttf simsun.ttf 解决JfreeChart 在 Linux 环境下乱码的问题。