问题描述
java中使用pdfbox工具将pdf文件转为图片时报错:No glyph for 20339 (CID 0844) in font STSong-Light
导出的图片若有中文的位置,出现框框或者乱码
问题原因
pdfbox默认使用STSong-Light
字体,且当前环境中没有该字体
解决办法
1.安装STSONG.TTF
字体
windows与linux环境字体通用,只是安装方式略有不同,可以自行查询
win10安装字体时,要选择“为所有用户安装”,确保安装文件保存到 C:\Windows\Fonts 目录中
安装完毕之后,重启服务,如果仍然是显示字体缺失,继续往下
2.修映射类 org.apache.pdfbox.pdmodel.font.FontMapperImpl
在pdfbox的jar包中找到字体映射的类org.apache.pdfbox.pdmodel.font.FontMapperImpl
,
将全部内容拷贝,在自己的项目目录下,建立一个完全一样的包结构和类文件,并拷贝里面的内容
在FontMapperImpl()构造方法中,添加替代方案
this.substitutes.put("STSong-Light", Arrays.asList("STFangsong"));
这一步操作相当于重写了整个类,程序执行到这里时会优先执行我们重写的类
重启服务,检验效果,如果仍然不起作用,继续
3.安装字体AdobeSongStd-Light.otf
这也是我遇到的情况,有点坑人,缺这个字体早说嘛,也不给个提醒
安装以后重启服务,解决问题