一、背景介绍
因项目需求,需要将word格式文件转换pdf并添加水印,由于我在本地windos开发环境调试没有任何问题,一到测试环境linux发现乱码
例如:
二、排查原因
由于项目是用docker+jenkins部署,经排查后发现原因是因为Linux跟windos中的字体不一样,windos中 c:\windos\user\Fonts 目录中自带很多字体。但linux docker容器中并没有映射或者挂载这些字符集导致pdf下载的时候乱码
三、解决方案
1.将windos中 c:\windos\user\Fonts 目录中的字体 复制到一个新的文件夹中,并上传到linux /usr/share/fonts 这个目录下
2.执行字体安装命令
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv
3.执行命令让字体生效
source /etc/profile
4.如果安装失败,可以考虑修改字体权限(安装成功可忽略)
chmod 755 *.ttf
5.进入docker 容器映射挂载容器卷属性 -v /usr/share/fonts:/usr/share/fonts
6.最终重新部署jenkins 即可完成
以我个人为例。我进入部署的docker 容器中 然后查询容器下的字体集,发现果然没有且缺少很多
四、总结
一开始在Linux中按照网上的相关资料排查很久,最后发现项目不是用jar包的形式部署,而是采用docker+jenkins的形式,花1个多小时踩了个巨坑,最后发现是docker容器中的挂载卷中的映射容器没并有字体。然后配置相关映射挂载才得以解决!所以在此分享一下踩坑心得