Font \"微软雅黑\" is not available to the JVM. See the Javadoc for more details.

本文介绍了在Linux环境下使用JasperReport生成报表时遇到的字体问题及解决方案,包括字体安装步骤、系统语言调整方法。

1. 背景

  在工作中使用JasperReport生成报表,会出现错误Font \"微软雅黑\" is not available to the JVM. See the Javadoc for more details.

2. 分析

  开发环境是window7,并没有出现该问题。测试环境是linux,出现该错误。根据错误的字面意思,初步设想是linux服务器上没有该字体。

3. 安装字体

  • 将window7上的中文字体安装到linux下
  • window7下字体所在位置:C:\Windows\Fonts。如下所示:

  • 将简体中文字体复制到linux下,保存路径为:/usr/share/fonts/chinese/TrueType。如下所示,可视化工具为WinSCP:

  • 使用命令安装字体:

  cd /usr/share/fonts/chinese/TrueType

  mkfontscale

  mkfontdir

  fc-cache –fv

  • 查看安装的字体:

  fc-list :lang-zh

 

  注意图中所选的字体微软雅黑,左边中中文表示,右边是英文表示

4. 再分析

  若重启服务后,问题已经解决,那么恭喜。但是我在实际情况下,很明确的linux下已经安装了字体,但还是提示错误。这很可能是环境不一样引起的问题,所以我想到了远程debug调试,远程调试配置:http://www.cnblogs.com/zhuqianchang/p/9044699.html

报错的位置在FontUtil.java350行,查看源码如下:

 

  根据源码分析,先获取系统的字体加入缓存,缓存是一个Set集合,然后判断指定字体是否在集合中。所以debug进去后,查看缓存中的字体,发现确实不存在字体“微软雅黑”,但是却发现了字体“Microsoft YaHei”。所以问题明确了,虽然安装了字体,但linux系统语言是英语,所以导致contains方法并不能匹配到字体“微软雅黑”,所以报错。

5. 修改系统语言

  • 查看当前语言

  echo $LANG

  • 修改语言

  vi /etc/sysconfig/i18n

  英文:LANG="en_US.UTF-8"

  中文:LANG="zh_CN.UTF-8"

  • 即时生效

  source /etc/sysconfig/i18n

6. 重启服务

  根据源码,系统字体保存在缓存中,所以需要重启服务。重启后,问题顺利解决

转载于:https://www.cnblogs.com/zhuqianchang/p/9045434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值