pdfbox 转图片中文乱码处理

pdfbox 转图片中文乱码处理

线上问题

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.重启服务

仿宋字体
pdfbox 转图片中文乱码处理_第1张图片

至此,问题解决

你可能感兴趣的:(java)