linuxjasperreport字体,springboot+ireport项⽬在linu。。。背景
因平台升级需要重构⽼系统报表打印服务,整合成 springboot+ireport 打印及预览 pdf ⽂件,并使⽤ docker ⽅式部署到 Linux 服务器。
现象
在本地 Windows 上测试通过后,将代码提交并打包 Docker 运⾏,点击打印提⽰如下错误:
net.ine.util.JRFontNotFoundException: Font '仿宋' is not available to the JVM. See the Javadoc for
问题
经检查发现是因为原框架中 ireport 的 jar 包中可默认从系统中获取字体环境,因此在 Windows 下若有该字体,就不会报错。⽽在 Linux 系统下往往缺乏⼀些中⽂字体环境,因此使⽤ ireport 导出或打印将会出现字体未在 JVM 编译等问题
解决
经研究,有两种解决⽅法:
1、⽅法⼀:可以对 Linux 安装相应字体库解决,具体根据系统版本参考⽹上资料。但该解决⽅式,需要每次部署Linux 时候都需要进⾏字体的安装,不利于部署。
2、⽅法⼆:将字体打进 jar 包,加载到项⽬中。使⽤该⽅法,在以后实施时,即便系统未安装字体,只要项⽬有该 jar 包即可保证程序字体环境正常运⾏。
由于此服务使⽤ Docker 部署,基础镜像为 alpine3.8 ,安装字体再重新打包复杂且不经济。这⾥采⽤第⼆种⽅法解决。
操作
1、到⾃⼰本地的 jasperreports-fonts-4.0.0.jar 包(到⾃⼰版本的jar包,我是使⽤的4.0.0版本),没有可以去 maven 仓库中下⼀个(链接)。
2、在本地 C:\Windows\Fonts ⽬录下,到 f ⽂件(如果本地没有,在⽹上下⼀个)
3、打开 jar 包,或者解压后再打开,将 f  复制到⽬录 \net\sf\jasperreports\fonts\dejavu 下
4、修改 \net\sf\jasperreports\fonts ⽬录中的 l,追加 fontFamily 元素,并配置宋体信息:
net/sf/jasperreports/fonts/f
net/sf/jasperreports/fonts/f
net/sf/jasperreports/fonts/freport是什么意思
net/sf/jasperreports/fonts/f
Identity-H
true
'仿宋', Arial, Helvetica, sans-serif
'仿宋', Arial, Helvetica, sans-serif
5、*如果修改的是 maven 上获取的 jar ,可修改 jar 包中的 jasperreports_extension.properties ⽂件,添加:
net.sf.jasperreports.awt.ignore.missing.font=true
6、完成以上操作后,保存或重新打 jar 包(命令:jar cvfm jasperreport-fonts-extra-4.0.0.jar test\META-INF\MANIFEST.MF -C test\ .)。普通 web 项⽬直接在 lib 依赖下添加 jar ,maven 需要重
新修改 pom 再引⼊。重启项⽬,问题解决。
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。