2019-07-30 17:04:05 [ WARN] - org.apache.pdfbox.rendering.CIDType0Glyph2D -CIDType0Glyph2D.java(63) -No glyph for 21487 (CID 0956) in font STSongStd-Light
之前系统正常运行,迁移了系统到另一台机器上就报了这个异常,pdf使用的itext5生成,为了方便移动端查看,当检测到请求端为移动端时,将pdf转为图片返回给请求端,pdf转图片,使用的是pdfbox 2.0,系统迁移后,出现问题,查看日志后,经过一顿百度,发现不少人都遇到了这个问题都是
STSongStd-Light 字体找不到,由于时间太长也不记得老环境是否装有这个字体,索性上去一顿查,发现我并没有装STSongStd-Light这个字体,但是不出现乱码.
1.发现上述问题之后,我首先怀疑是jar包的问题
使用jar包版本
com.itextpdf
itext-asian
5.2.0
compile
com.itextpdf
itextpdf
5.5.9
compile
org.apache.pdfbox
pdfbox
2.0.8
compile
最终经过几次在测试环境测试,始终乱码,最终排除了这个疑问
2.在测试jar版本问题时,查看到日志中包含大量的字体未找到警告,所以在网络找了半天也没有找到这个字体STSongStd-Light,最后用极速pdf打开原始pdf,发现这个字体是华文宋体Std-Light-UniGB-UCS2-H,使用itext5创建pdf时,使用这个字体处理中文问题
到这里解决方案就是:只要找到STSongStd-Light在服务器上安装上就可以解决pdfbox乱码问题.
但是 网络上找了半天也没找到STSongStd-Light 这个字体,所以为了寻找解决方案,必须搞明白老环境没有这个字体也能正常显示原因, 排查步骤,在老环境部署测试环境,测试pdfbox pdf转图片时的告警日志,发现如下问题:
-Using fallback STFangsong for CID-keyed font STSongStd-Light,日志很清楚的写到pdfbox
使用 STFangsong 代替STSongStd-Light 显示中文,
通过查询老环境的STFangsong 字体,安装到新环境,然后重启服务最终解决了乱码问题
1.安装字体管理工具
yum install -y fontconfig mkfontscale
2. 进入字体文件夹
cd /usr/share/fonts/
3.上传STFangsong 字体到服务器
STFangsong 字体在windows机器上copy就行 目录在 C:\Windows\Fonts\STFANGSO.TTF
4.进入自定义字体所在目录,执行如下命令
mkfontscale
mkfontdir
//更新字体缓存
fc-cache -fv
// 执行以下命令让字体生效
source /etc/profile
fc-list |grep STFangsong
5.重启服务
至此,问题解决