PDFBox转图片问题汇总
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDFBox转图片问题汇总相关的知识,希望对你有一定的参考价值。
参考技术A pdfbox是一款Apache的开源工具,可以进行对pdf进行操作,如题,转图片也包含在里面,还有添加、删除、编辑pdf页,提取文字等功能。对于基本语法可参考官网,这里不再讲解基础,只列出一些问题。我们在转化过程中可能会遇到转换缺失等问题,请加上以下依赖:
(1) jpegerror的异常
(2) ERROR: Cannot read JBIG2 image: jbig2-imageio is not installed
(3) Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed
参考:
https://blog.csdn.net/u014155085/article/details/86077614
使用pdfBox实现pdf转图片,解决中文方块乱码等问题
一、引入依赖
<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>
二、PDF转PNG代码
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"));
三、PNG中文方块乱码
查看linux服务器上的字体库如下。
转换后的PNG如下。
日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。
四、linux添加字体库
可以选择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如下。
以上是关于PDFBox转图片问题汇总的主要内容,如果未能解决你的问题,请参考以下文章