pdfbox pdf转换图片时中文丢失,变成方框,提示No glyph for xxx in font STSong-Light

使用pdfbox转换图片时,转换出来的图片中文丢失,变成方框。原因是由于服务器字体缺失,pdfbox在转换时找不到合适的字体。

有几种方案:

  1. 服务器安装字体,具体资源百度
  2. 使用备用字体。
    将pdfbox中的FontMapperImpl类(见图一)复制出来,建立相同的目录,放在新建的目录中(相当于复写) (idea可以直接双击shift打开快捷搜索窗口,直接搜类名即可)

图一在这里插入图片描述

在94行一下以下新增一行

substitutes.put("STSong-Light", Arrays.asList("SimSun")); //主要看系统有什么字体

在这里插入图片描述

  1. 使用本地字体 – 由于本人系统跑在docker中,字体拷贝麻烦,采用了本地字体方式 – 跟(2)区别在于一个是使用系统的字体,需预装。(3)是使用项目目录或自定义目录下的字体包
    同(3),将pdfbox下的FileSystemFontProvider类拷贝出来,新建同名的目录,如图二。

图二在这里插入图片描述
搜索FileSystemFontProvider(FontCache cache)方法(我的是2.0.12)的包,位于193行,如图三。
定位files.add(new File(font));,恭喜你,找到pdfbox初始化字体库缓存的路口了,在下面追加一行files.add(new File("你本地字体文件目录"));即可,由于我这边字体是放在线上,所以多了一步url转file的过程。

图三在这里插入图片描述

提一句,有一行List<URI> fonts = fontFileFinder.find();代码,作用是遍历查找你系统字体库的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值