<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.13</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.13</version> </dependency>
String pdfBase64 = "XXXXX"; PDDocument pdDocument = PDDocument.load(Base64Utils.decodeFromString(pdfBase64)); PDFRenderer renderer = new PDFRenderer(pdDocument); BufferedImage bufferedImage = renderer.renderImage(0); ImageIO.write(bufferedImage, "png", new File("xxx.png"));
查看linux服务器上的字体库以下。linux
转换后的PNG以下。apache
日志中打印出相似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。若是出现方块,就说明没有这种字体,而且替代字体也没有,日志也有相应的其余提示。缓存
能够选择STSong-Light字体,而我这里选择simsun.ttf字体。服务器
#cd /usr/share/fonts/ // 进入系统自带的字体目录 #mkdir myfonts // myfonts 是你本身随便取得文件夹名字,必定要有这一步 #将字体文件拷贝到这个文件夹下,在cd /usr/share/fonts/目录下执行如下命令 #mkfontscale #mkfontdir #fc-cache -fv //更新字体缓存 #fc-list // 查看系统中全部得字体,可用于测试是否安装字体成功
若是 /usr/share/fonts/ 目录当前用户没有权限,能够在 ~/.fonts/ 目录下新增字体库,操做步骤和上面同样。
注意:必定要建立字体对应的文件夹,若是字体直接放在fonts目录,不会生效。
新增字体以后,能够看到字体库列表中有以下 宋体 的字样了。测试
最终转换后正常的PNG以下。字体