linux系统docker容器部署项目字体问题-Graphics2D在容器里面不显示字体

发布时间 2023-09-18 17:30:26作者: 全琪俊

继上一个博客中生成 签章图片后,今日遇到一个问题,
本地不管如何改代码,都会将签名文字显示出来。

但是....
.......
一旦部署在linux系统后,一直打印不出来,,纠结的呀。。
完全没想到,
原来是linux系统里面不兼容本地的字体,也就是没有那么多中文字体,除非安装。

可以惊醒安装字体:参考文档:http://www.ay1.cc/article/18658.html

另外一种方式是在项目的dockerfile文件中把字体simsun.ttf加进去,打成镜像。

 



 

 

 

解决思路:

其实就像解决linux本身没有宋体的问题一样,也可以用来解决容器问题。发现其实很多docker容器的问题最后都可以仿照linux的解决思路来处理。大体就是下载宋体ttf、ttc文件,然后将其考入容器字体目录下,重启容器即可。

解决办法:

1、查看容器支持的字体。

fc-list :lang=zh

当看到下列情况,说明没有安装字体管理,需要安装字体

2、安装字体库。

yum -y install fontconfig #安装字体库
yum -y install ttmkfdir mkfontscale #安装字体索引信息

安装完成后,在/usr/share目录下就能看到fontconfig、fonts文件夹,如图:

3、将下载下来的字体ttc、ttf文件拷贝到容器的/usr/share/fonts文件中。

cp simsun.ttc 容器:/usr/share/fonts
cp simsun.ttf 容器:/usr/share/fonts
docker cp /usr/share/fonts/zh/msyh.ttc 容器:/usr/share/fonts/zh
docker cp /usr/share/fonts/zh/simsun.ttc 容器:/usr/share/fonts/zh

cd /usr/share/fonts

mkdir fonts

mkdir zh

chmod -R 755 /usr/share/fonts/

chmod -R 755 /usr/share/fonts/zh/

4、生成字库索引信息

上传完字体后,进入zh目录

执行如下:

cd zh

mkfontscale

mkfontdir

该命令在当前zh目录下生成 fonts.dir fonts.scale 两个文件

5. 更新字体缓存

执行 fc-cache

6.再次上看是否安装了中文字体 fc-list :lang=zh

 

4、然后重启容器,就可以看到安装的中文字体。

5、也可以将此步骤写到Dockerfile中,在构建镜像的时候自动实现。

补充:Docker | Docker容器中安装中文字体 和 更改 utf-8 编码(解决中文乱码问题)

docker exec -it 62f8c8c2afff bash
docker exec -it 62f8c8c2afff /bin/bash


docker cp /usr/share/fonts/zh/msyh.ttc 62f8c8c2afff:/usr/share/fonts/zh
docker cp /usr/share/fonts/zh/simsun.ttc 62f8c8c2afff:/usr/share/fonts/zh

 

 在Dockerfile中添加字体库路径:

FROM alpine
RUN apk add wqy-zenhei && \
ln -sf /usr/share/fonts/truetype/wqy/wqy-zenhei.ttf /usr/share/fonts/truetype/wqy-zenhei.ttf && \
fc-cache -vf && \
apk del fontconfig
CMD ["bash"]

 #拷贝字体文件到容器
COPY /packages/chinese/fonts/* /usr/share/fonts/truetype/dejavu/
#重新加载字体
RUN cd /usr/share/fonts/truetype/dejavu/ && fc-cache -fv >> fc.log

 

 

 

3.2. 安装中文字体,显示中文

3.2.1 查看现有字体

查看Linux目前的所有字体

fc-list

查看Linux目前的所有中文字体

fc-list :lang=zh

3.2.2 获取其他字体

在 windows 系统中,字体存在于 C:\Windows\Fonts 下。复制后,打上传到 Linux 服务器 /opt/software/chinese 中(我是要在docker容器中安装字体,如果要在linux主机中安装字体,则直接放在服务器的 /usr/share/fonts/ 文件夹下)。

3.2.2 容器安装字体

docker ps -a
#查看容器

docker cp /opt/software/chinese tomcat:/usr/share/fonts/
#tomcat为容器名称
docker exec -it tomcat /bin/bash
#进入容器
chmod 644 -R chinese/
授权文件夹
fc-list :lang=zh
#查看中文字体

 

fc-cache -fv
#刷新缓存

 

3.3. 验证

pagoffice ---- 改动docker 容器后,需要重启容器

word2pdf ---- 刷新字体缓存即可,不需要重启容器