PDF转化为图片

Java 类 PDF2Image 在包 com.oncloudsoft.zbznhc.common.util.pdf 中是用来将 PDF 文件转换为图像的。它使用了 Apache PDFBox 库来处理 PDF 文档并生成图像。下面是类中每个部分的详细解释:

类和方法说明

  • PDF2Image:

    • 使用了 Lombok 库的 @Slf4j 注解,这会为类自动生成一个日志记录器(logger),可以用来记录信息、错误等。
    • 提供了两个重载的 pdf2Image 方法,用于处理 PDF 到图像的转换。
  • 方法 pdf2Image(String file, String targetFolder):

    • 接受 PDF 文件的路径和目标文件夹路径作为参数。
    • 打印日志信息。
    • 调用另一个重载的 pdf2Image 方法来执行转换。
  • 方法 pdf2Image(File file, String targetFolder):

    • 接受 File 对象和目标文件夹路径作为参数。
    • 使用 PDDocument.load 加载 PDF 文件,并设置内存使用设置为仅使用临时文件。
    • 获取 PDF 文档的总页数。
    • 使用 PDFRenderer 类来渲染 PDF 页面为图像。
    • 逐页渲染 PDF,并将渲染后的图像保存为 JPG 格式的文件。
    • 图像的文件名基于原始 PDF 文件名,并附加页码和 .jpg 后缀。
    • 处理完所有页面后,返回包含生成的图像文件路径的列表。
  • 异常处理:

    • 捕获并记录 InvalidPasswordExceptionIOException 异常。
  • 主方法 main(String[] args):

    • 用于测试 pdf2Image 方法。
    • 记录并打印转换过程所需的时间。

功能

该类主要用于将 PDF 文件转换为一系列的 JPG 图像,每页一个图像。这在需要将 PDF 文档的内容以图像形式展示或处理时非常有用,如在网页上显示 PDF 页面的预览图。

使用 Apache PDFBox

Apache PDFBox 是一个开源的 Java 工具,用于处理 PDF 文档。这个类利用 PDFBox 提供的功能来渲染和保存 PDF 页面作为图像。

注意事项

  • 需要确保 Apache PDFBox 库已被添加到项目依赖中。
  • 方法中使用了硬编码的 DPI(每英寸点数)和 JPG 图像质量设置,这可能需要根据实际需求进行调整。
  • 生成的 JPG 文件将保存在指定的目标文件夹中。
bash 复制代码
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));
	}
}
相关推荐
穆友航3 小时前
PDF内容提取,MinerU使用
数据分析·pdf
拾荒的小海螺1 天前
JAVA:探索 PDF 文字提取的技术指南
java·开发语言·pdf
村东头老张1 天前
Java 实现PDF添加水印
java·开发语言·pdf
好美啊啊啊啊!1 天前
Thymeleaf模板引擎生成的html字符串转换成pdf
pdf·html
zhentiya1 天前
曼昆《经济学原理》第八版课后答案及英文版PDF
大数据·pdf
三天不学习1 天前
如何解决pdf.js跨域从url动态加载pdf文档
javascript·pdf
吾店云建站1 天前
9个最佳WordPress PDF插件(查看器、嵌入和下载)
程序人生·pdf·创业创新·流量运营·程序员创富·教育电商
007php0071 天前
基于企业微信客户端设计一个文件下载与预览系统
开发语言·python·docker·golang·pdf·php·企业微信
慧都小妮子2 天前
Spire.PDF for .NET【页面设置】演示:更改 PDF 页面大小
前端·pdf·.net