linux系统docker容器部署项目字体问题-Graphics2D在容器里面不显示字体
继上一个博客中生成 签章图片后,今日遇到一个问题,
本地不管如何改代码,都会将签名文字显示出来。
但是....
.......
一旦部署在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 ---- 刷新字体缓存即可,不需要重启容器