• -------------------------------------------------------------
  • ====================================

Java PDF文件逐页转换为图片

技能 dewbay 5年前 (2019-08-20) 2652次浏览 已收录 0个评论 扫描二维码

一直以来,Java 体系就缺少操作PDF文件的类库,直到PDFBox 的出现。

PDFBox 是一款基于 Java 的优秀的PDF文件处理类库,支持从PDF文件中提取文本、将图片插入PDF文件、将 PDF 文件逐页的生成图片等等。

这里主要讲一下将 PDF 文件逐页生成图片。

1、PDF 文件逐页生成图片(基于 2.x 版本)

PDDocument doc = PDDocument.load(pdfFile);

int pageCount = doc.getNumberOfPages();

PDFRenderer pdfRenderer = new PDFRenderer(doc);

for (int pageIndex=0; pageIndex<pageCount; pageIndex++) {

BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 105, ImageType.RGB);

ImageIOUtil.writeImage(image, imageFilePath, 105);

}

doc.close();

上述代码能将一个 PDF 文件逐页转换为图片

笔者在自己的 Windows 机器上能正常运行,将一个带有中文填充字符的 PDF 文件逐页转换为了图片。但是将服务部署到 Linux 机器上后,发现中文填充字符变成了方框,也就是出现了乱码。

2、依赖系统字体经仔细研究,PDFbox 将 PDF 文件转换为图片的过程中,需要操作系统上安装了 PDF 文件中使用的字体,不然可能出现乱码。

而 PDF 文件中用到的字体,可以从【文件】==》【属性】==【字体】中查看。

可以在 linux 上使用 fc-list 指令查看已经安装的字体,比对找出缺少的字体,然后逐一安装。

3、PDFbox 会缓存字体信息安装完相应的字体后,发现乱码还在(空的框框),后来从 PDFbox 的日志上得知,PDFbox 在应用启动的时候会将字体信息缓存到内存中。

于是想到重启应用,重启应用后,日志中会看到已探测到新的字体,并逐一加载到内存缓存,重新执行命令,可以看到乱码消失,图片正常了。

作者:LBQY
链接:https://www.jianshu.com/p/22a84090753f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java PDF文件逐页转换为图片
喜欢 (0)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址