赞
踩
公司有一个项目专门做数据转图片导出的,今天改动了一下配置发布上去发现图片是有了中文无法显示,中文全是方框。
第一反应是中文乱码,这个项目是一直用的改动配置就能用的中文乱码不可能是项目本身
第二是确认tomcat的环境,tomcat下其他项目中文正常说明不是tomcat本身
第三看检查代码发现使用了BufferedImage+Graphics2D的模式生成图片,于是尝试设置font的字体
设置字体
试了好几次依然不好使,最后考虑系统环境问题发现系统的字符集是英文的使用命令:locale
最初是英文的,然后参考百度资料修改成中文字符集,这个一定要改最初没改折腾我大半天没好。
注意修改之后要重启系统
改好之后以为可以了,结果发现还是不行,然后百度各种资料尝试
第一种:把使用的字体复制到服务器jdk的jre下fonts文件夹下失败,
第二种:把字体复制到class目录下失败。
经过各种乱七八糟的命令和资料后确认了几个要点
1,iReport 生成的.jasper 文件本身有字体指定,如果没有设置就是默认字体,
2,与BufferedImage+Graphics2D的字体设置无关这也是setFont无效的原因,他的字体是由.jasper在生成时字体决定的,由于对ireport本身默认字体未知,所以我把所有字体统统设计成了宋体,网上说的一大堆导出字体的误导了好久,ireport本身会加载系统自带的字体。
解答思路初步有了
1、修改ireport的中文字体,统一设置为宋体
2、重新打包项目测试接口,这时候报错提示宋体不支持,
3、安装宋体,参考网络资料安装宋体字体,宋体字体文件叫simsun.ttc 需要改成simsun.ttf
命令不支持请参考:
# 使mkfontscale和mkfontdir命令正常运行
yum install mkfontscale
# 使fc-cache命令正常运行。如果提示 fc-cache: command not found
yum install fontconfig
4、本来以为这个过程安装完成就可以了结果发现还是不行,最后想到前面系统的字符集还是英文的切换回去重启tomcat问题解决。
查看当前字符集:locale
修改当前字符集:vim /etc/sysconfig/i18n
修改完成刷新字符集:source /etc/sysconfig/i18n
重新查看字符集:cat /etc/sysconfig/i18n
查看字体
fc-list
查看系统中的中文字体
fc-list :lang=zh
如果验证码不显示或是显示不正常必须安装相应的字体:
如:
cd /usr/share/fonts
mkdir arial
然后将windows中C:/windows/Fonts中Arial里面的.ttf字体文件放到linux的/usr/share/fonts/arial
fc-list如果存在,就可以了
总结:这个问题本身时Linux系统缺少字体,然后正好遇到Linux安装成了英文字符集,只需要把ireport的中文字体修改掉,然后找对应字体拷贝安装到服务器Linux下,并且改正号系统字符集就可以了。改ireport》安装字体》改系统字符集
编码10年了懒癌发作今天竟然写了文章,给自己加鸡腿
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。