JVM无法获取Calibri字体,Jasper Reports微服务报错求助
解决Jasper Reports中"Font 'Calibri' is not available to the JVM"错误
我之前在部署Jasper Reports微服务时也踩过这个坑——本地因为装了Office自带Calibri字体,测试完全没问题,但一部署到服务器或者容器里就报这个500错误。本质原因是运行微服务的JVM环境找不到Calibri字体文件,给你几个实用的解决方案:
方案1:把Calibri字体嵌入到项目中(推荐,环境无关)
这是最稳妥的办法,不用依赖服务器环境:
- 从本地Windows系统的
C:\Windows\Fonts目录里找到需要的Calibri字体文件(比如Calibri.ttf、Calibri Bold.ttf、Calibri Italic.ttf等,根据报表里的使用情况复制),放到项目的src/main/resources/fonts目录下。 - 在你的Jasper报表jrxml文件中,配置字体使用嵌入式:
<font fontName="Calibri" size="12"> <pdfFontName>fonts/Calibri.ttf</pdfFontName> <pdfEncoding>Identity-H</pdfEncoding> <isPdfEmbedded>true</isPdfEmbedded> </font> - 如果你有多个报表使用,也可以用Jasper的字体扩展工具生成一个字体jar包,添加到项目依赖里,这样所有报表都能共用这个字体配置。
方案2:在服务器上安装Calibri字体
如果你的服务运行在固定服务器上,也可以直接给服务器安装字体:
- Linux服务器:
- 将Calibri字体文件上传到
/usr/share/fonts目录 - 执行命令更新字体缓存:
fc-cache -fv - 重启你的微服务,让JVM重新加载字体库
- 将Calibri字体文件上传到
- Windows服务器:直接双击字体文件安装,然后重启服务即可。
方案3:通过JVM参数指定字体路径
如果字体存放在自定义目录,启动微服务时可以添加JVM参数告诉JVM去哪里找:
-Djava.awt.fonts=/path/to/your/calibri-fonts-folder
替换成你实际存放字体文件的目录路径,重启服务后生效。
额外注意点
- 确保字体文件的权限正确:Linux下要让运行微服务的用户有读取字体文件的权限
- 如果用Docker容器部署,记得把字体文件复制到容器内,或者用方案1的嵌入方式更方便
内容的提问来源于stack exchange,提问作者dani
相关产品推荐
相关产品推荐

