pom引入依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.4</version>
</dependency>
创建工具类
package com.sage.common.utils.file;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import com.sage.common.utils.StringUtils;
import com.sage.common.utils.uuid.Seq;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
/**
* 描述: .
*
* @author fucc
* @version 2023.09.24 2023/9/24 1:19
*/
public class PdfUtils {
/**
* 描述 根据文件url转为 文件(图片、pdf)
*
* @param fileUrl :文件url
* @return java.io.File
* @author fucc
* @version 1.0.0 2023/9/24 1:22
* @since 1.0.0
*/
public static File fileUrlToFile(String fileUrl) {
File file = null;
String fileName = fileUrl.substring(fileUrl.lastIndexOf("."));
URL urlfile;
InputStream inputStream = null;
OutputStream outputStream= null;
try {
file = File.createTempFile("pdf", fileName);
//下载
String filename = com.sage.common.utils.StringUtils.substring(fileUrl, fileUrl.lastIndexOf("/") + 1);
filename = filename.replaceAll(" ", "%20");
String encode = URLEncoder.encode(filename);
String filepath = com.sage.common.utils.StringUtils.substring(fileUrl, 0,fileUrl.lastIndexOf("/") + 1);
urlfile = new URL(filepath + encode);
inputStream = urlfile.openStream();
outputStream= new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (null != outputStream) {
outputStream.close();
}
if (null != inputStream) {
inputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}
/**
* 描述 将PDF的每一页转换为png格式的图片文件.
*
* @param file :
* @return java.util.List<java.io.File>
* @author fucc
* @since 1.0.0
*/
public static List<File> pdfToPngImage(File file, String pdfImagePath) throws IOException {
List<File> fileList = new ArrayList<>();
// 打开要转换的 PDF 文件
PDDocument document = PDDocument.load(file);
// 创建 PDFRenderer 对象
PDFRenderer renderer = new PDFRenderer(document);
// 获取PDF的总页数
int size = document.getNumberOfPages();
for (int i = 0; i < size; i++) {
// 将 PDF 中的第一页转换为 BufferedImage 对象
// scale参数值越大,图片越清晰,相对应的速度越慢,转换后图片的越大
BufferedImage image = renderer.renderImage(i, 3, ImageType.RGB);
String filename = extractFilename();
File pngImageFile = new File(pdfImagePath + filename);
// 将 BufferedImage 对象保存为 PNG 图片
ImageIO.write(image, "png", pngImageFile);
fileList.add(pngImageFile);
}
// 关闭文档
document.close();
return fileList;
}
public static final String extractFilename() {
return StringUtils.format("{}.png", Seq.getId(Seq.uploadSeqType));
}
public static void main(String[] args) {
String url = "pdf文件url地址";
try {
File pdfFile = PdfUtils.fileUrlToFile(url);
List<File> fileList = PdfUtils.pdfToPngImage(pdfFile, "PDF转换后的图片保存地址");
System.out.println("PDF每页转图片完成");
pdfFile.delete();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}