Java 类 PDF2Image 在包 com.oncloudsoft.zbznhc.common.util.pdf 中是用来将 PDF 文件转换为图像的。它使用了 Apache PDFBox 库来处理 PDF 文档并生成图像。下面是类中每个部分的详细解释:
类 PDF2Image:
@Slf4j 注解,这会为类自动生成一个日志记录器(logger),可以用来记录信息、错误等。pdf2Image 方法,用于处理 PDF 到图像的转换。方法 pdf2Image(String file, String targetFolder):
pdf2Image 方法来执行转换。方法 pdf2Image(File file, String targetFolder):
File 对象和目标文件夹路径作为参数。PDDocument.load 加载 PDF 文件,并设置内存使用设置为仅使用临时文件。PDFRenderer 类来渲染 PDF 页面为图像。.jpg 后缀。异常处理:
InvalidPasswordException 和 IOException 异常。主方法 main(String[] args):
pdf2Image 方法。该类主要用于将 PDF 文件转换为一系列的 JPG 图像,每页一个图像。这在需要将 PDF 文档的内容以图像形式展示或处理时非常有用,如在网页上显示 PDF 页面的预览图。
Apache PDFBox 是一个开源的 Java 工具,用于处理 PDF 文档。这个类利用 PDFBox 提供的功能来渲染和保存 PDF 页面作为图像。
package com.oncloudsoft.zbznhc.common.util.pdf;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.io.MemoryUsageSetting;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class PDF2Image {
private static final int PAGE_SIZE = 50;
/**
* 提取
* @param file PDF文件
* @param targetFolder 图片存放目录
* @return
*/
public static ArrayList<String> pdf2Image(String file, String targetFolder) {
log.info("PDF2Image中,file为:"+file);
return pdf2Image(new File(file), targetFolder);
}
/**
* 由于apache-pdfbox版本升级到2.0.18, 部分api不兼容,覆盖旧版本pdf2Image方法
* @param file pdf文件
* @param targetFolder 图片保存文件夹路径
*/
public static ArrayList<String> pdf2Image(File file, String targetFolder) {
ArrayList<String> list = new ArrayList<>();
String prex = file.getName().split("\\.")[0];
try (
PDDocument document = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly());
) {
int pages = document.getNumberOfPages();
PDFRenderer renderer = new PDFRenderer(document);
int k = 0;
int count = 1;
List<BufferedImage> imageList = new ArrayList<>(PAGE_SIZE);
for (;;) {
int startPage = k * PAGE_SIZE;
int endPage = startPage + PAGE_SIZE > pages ? pages : startPage + PAGE_SIZE;
k++;
imageList.clear();
for (int i = startPage; i < endPage; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, 150);
// imageList.add(image);
String imgPath = targetFolder + File.separator + prex + "_" + (count++) + ".jpg";
ImageIOUtil.writeImage(image, imgPath, 200);
list.add(imgPath);
}
if (endPage == pages) break;
}
return list;
} catch (InvalidPasswordException e) {
log.error("", e);
} catch (IOException e) {
log.error("", e);
}
return list;
}
public static void main(String[] args) throws IOException {
long s = System.currentTimeMillis();
String file = "/home/sunyuhua/test/1+2.pdf";
String folder = "/home/sunyuhua/test/jpg";
pdf2Image(file, folder);
System.out.println("耗时: " + (System.currentTimeMillis() - s));
}
}