在项目中需要使用 html2image 生成图片。
发现在开发环境(windows系统)下,转换图片后中文显示正常,但是在测试环境(Linux系统)下中文乱码,需要安装中文字体,为了方便构建服务镜像,索性直接将字体安装在基础镜像中。
编写Dockerfile
simsun.ttf 和 simsun.ttc 是宋体,可以再windows系统(C:\Windows\Fonts)文件夹下找到。
FROM centos:7
# install simsun
COPY simsun.ttf /usr/share/fonts/my-fonts/simsun.ttf
COPY simsun.ttc /usr/share/fonts/my-fonts/simsun.ttc
RUN yum -y install fontconfig \
&& yum -y install mkfontscale \
&& mkfontscale && mkfontdir \
&& fc-cache -fv
构建镜像后,进入容器查看安装的中文字体
[root@acd834g3 /]# fc-list :lang=zh
/usr/share/fonts/my-fonts/simsun.ttc: SimSun:style=Regular
/usr/share/fonts/my-fonts/simsun.ttf: SimSun:style=Regular
/usr/share/fonts/my-fonts/simsun.ttc: NSimSun:style=Regular
到此,已经在docker容器中安装了中文字体。但是,还没解决 html2image 乱码问题。
解决html2image乱码问题
(1)临时解决
进入容器后,将字体复制到jre/lib/fonts/下,重启容器,解决问题。
cp /usr/share/fonts/my-fonts/* /usr/local/jdk1.8/jre/lib/fonts/
(2)彻底解决
在构建基础镜像的时候,将字体复制到jre/lib/fonts/下,修改上面的Dockerfile
FROM centos:7
# install simsun
COPY simsun.ttf /usr/share/fonts/my-fonts/simsun.ttf
COPY simsun.ttc /usr/share/fonts/my-fonts/simsun.ttc
COPY simsun.ttf /usr/local/jdk1.8/jre/lib/fonts/simsun.ttf
COPY simsun.ttc /usr/local/jdk1.8/jre/lib/fonts/simsun.ttc
RUN yum -y install fontconfig \
&& yum -y install mkfontscale \
&& mkfontscale && mkfontdir \
&& fc-cache -fv