把PDF转换成指定后缀名的图片
生活中难免遇到各种文件类型转换的问题,尤其是在办理一些证件的时候。例如,申请居住证积分的时候,把PDF版本的毕业证扫描件转换成jpg或者png等。下面提供一个工具,用于把PDF转换成指定后缀名的图片,需要的话,可以拿来即用。
package com.swagger.demo.controller;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class Pdf2Image {
private final static Logger logger = LoggerFactory.getLogger(Pdf2Image.class);
public static void main(String[] args) {
// 文件存放目录
String pathName = "D:\\testfiles";
convertFileType(pathName);
}
public static void convertFileType(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null != files) {
for (File innerFile : files) {
if (innerFile.isDirectory()) {
logger.info("文件夹:" + innerFile.getAbsolutePath());
convertFileType(innerFile.getAbsolutePath());
} else {
logger.info("文件:" + innerFile.getAbsolutePath());
String fileName = innerFile.getName();
//获取文件的后缀名
String suffix = fileName.substring(fileName.lastIndexOf("."));
logger.info(fileName + ", suffix = " + suffix);
// 只处理PDF文件,当然,可以根据需要,自行更改待处理文件类型
if (".pdf".equals(suffix)) {
String imagePath = innerFile.getAbsolutePath();
imagePath = imagePath.substring(0, imagePath.lastIndexOf(".")).concat(".jpg");
pdfToImage(innerFile, imagePath);
}
}
}
}
} else {
logger.info("文件不存在!");
}
}
/**
* 把pdf转换成PNG、jpg等类型的图片
*
* @param file pdf文件
* @param imagePath 图片路径
*/
public static String pdfToImage(File file, String imagePath) {
logger.info("------------pdf转PNG---------------");
long start = System.currentTimeMillis();
try (PDDocument doc = PDDocument.load(file)) {
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
// 第二个参数越大转换后图片分辨率越高,转换耗时也就越长
BufferedImage image = renderer.renderImage(i, 2f);
ImageIO.write(image, "JPG", new File(imagePath));
// ImageIO.write(image, "PNG", new File(imagePathAndName));
}
logger.info(file.getName() + "转换完成,耗时:" + (System.currentTimeMillis() - start) + "ms。");
} catch (Exception e) {
logger.error("------pdf转PNG失败,异常信息:" + e.getMessage() + "---------");
}
return imagePath;
}
}
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南