Spring Boot+Jasper Reports在Docker中遇FontConfiguration空指针及字体问题
Spring Boot + Jasper Reports Docker部署字体问题解决方案
一、openjdk:17-alpine镜像的NullPointerException问题
你之前在Dockerfile里用apt-utils这类Debian/Ubuntu系的包命令,但alpine用的是apk包管理器,依赖根本没装成功,这是报错的核心原因。按下面步骤修正:
- 替换Dockerfile中的依赖安装命令,用apk安装正确的字体组件:
RUN apk add --no-cache fontconfig ttf-dejavu
- 安装完成后强制刷新字体缓存:
RUN fc-cache -f -v
- 启动应用时加上headless模式参数,规避AWT图形环境依赖:
java -Djava.awt.headless=true -jar your-app.jar
二、openjdk:17-oracle镜像的Times New Roman缺失问题
这个报错是因为镜像里没预装Times New Roman字体,给两种解决办法:
方法1:在镜像里安装兼容/原版字体
- 如果用兼容字体,直接通过yum安装liberation字体包(包含Times New Roman的替代字体,JVM会自动识别):
RUN yum install -y liberation-fonts
- 如果需要原版Times New Roman,把本地的字体文件(如
times.ttf、timesbd.ttf等)复制到镜像的字体目录,再刷新缓存:
# 假设本地字体放在项目的fonts目录下 COPY fonts/ /usr/share/fonts/ RUN fc-cache -f -v
方法2:修改Jasper Reports配置用替代字体
- 要么直接修改报表模板,把字体换成镜像里已有的(比如DejaVu Serif);要么在项目里新建
jasperreports_extension.properties文件,配置默认字体:
net.sf.jasperreports.default.font.name=DejaVu Serif
同时确保pom.xml里的jasperreports-fonts依赖包含该字体。
内容的提问来源于stack exchange,提问作者KenobiBastila
相关产品推荐
相关产品推荐

