JFreeChart 生成图表 在linux服务器中文乱码问题

JFreeChart 生成图表 在linux服务器中文乱码问题

java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术;

图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题;

如下方法可以解决该问题:

  • 在项目中加入ttf字体文件;
  • 代码中通过该字体文件创建Font对象;
  • 通过该Font对象控制图表中文字样式,即可避免中文乱码,同时,避免项目移植引起的字体样式丢失;

还有另一种解决方案

  • 给程序所在的Linux服务器安装相应的字体,这样就不需要在程序包中加入字体文件;
  • 但,程序移植到其他服务器之后字体样式将丢失;

以下是从字体文件创建Font的代码:


private static java.io.File file = 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);
		try {
			initFontFile();
			if (file == null || !file.exists()) {
				return defFont;
			}
			java.io.FileInputStream fi = new java.io.FileInputStream(file);
			Font nf = Font.createFont(Font.TRUETYPE_FONT, fi);
			fi.close();
			// 这一句需要注意
			// Font.deriveFont() 方法用来创建一个新的字体对象
			nf = nf.deriveFont(style, size);
			return nf;
		} catch (Exception e) {
		}
		return defFont;
	}

本文链接:http://blog.csdn.net/tomorrow13210073213/article/details/52159369
2017-05-22补充:
以上代码存在一个比较严重的问题:
代码上线运行后会在tomcat的temp目录下生成大量临时文件,并且不会自动删除;
虽然,代码里“fi.close();”已经将“FileInputStream”关闭了,但还是会生成临时文件无法删除,暂时不知道原因;
解决方式如下:
将如下代码替换:
 
java.io.FileInputStream fi = new java.io.FileInputStream(file); Font nf = Font.createFont(Font.TRUETYPE_FONT, fi); fi.close();

 

替换成:

 

 
Font nf = Font.createFont(Font.TRUETYPE_FONT, file);


即:直接通过file创建字体;

 

2018-11-12补充:

“2017-05-22补充”内容每次获取字体还是涉及到文件操作,依然会出现临时文件的问题,解决方式是直接将Font对象的实例置为静态,只创建一次;

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值