You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务器:
    1. 将Calibri字体文件上传到/usr/share/fonts目录
    2. 执行命令更新字体缓存:fc-cache -fv
    3. 重启你的微服务,让JVM重新加载字体库
  • Windows服务器:直接双击字体文件安装,然后重启服务即可。

方案3:通过JVM参数指定字体路径

如果字体存放在自定义目录,启动微服务时可以添加JVM参数告诉JVM去哪里找:

-Djava.awt.fonts=/path/to/your/calibri-fonts-folder

替换成你实际存放字体文件的目录路径,重启服务后生效。

额外注意点

  • 确保字体文件的权限正确:Linux下要让运行微服务的用户有读取字体文件的权限
  • 如果用Docker容器部署,记得把字体文件复制到容器内,或者用方案1的嵌入方式更方便

内容的提问来源于stack exchange,提问作者dani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:43:35