使用pdfbox转换图片时,转换出来的图片中文丢失,变成方框。原因是由于服务器字体缺失,pdfbox在转换时找不到合适的字体。
有几种方案:
- 服务器安装字体,具体资源百度
- 使用备用字体。
将pdfbox中的FontMapperImpl
类(见图一)复制出来,建立相同的目录,放在新建的目录中(相当于复写) (idea可以直接双击shift打开快捷搜索窗口,直接搜类名即可)
图一
在94行一下以下新增一行
substitutes.put("STSong-Light", Arrays.asList("SimSun")); //主要看系统有什么字体
- 使用本地字体 – 由于本人系统跑在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();
代码,作用是遍历查找你系统字体库的方法