Java 开发指南:将 PDF 转换为多种图片格式

72 阅读4分钟

Java 开发指南:将 PDF 转换为多种图片格式

引言

在实际开发中,PDF 文件广泛用于存储合同、报告、发票以及技术文档。然而,有时我们需要将 PDF 转换为图片格式,以便在网页上显示、生成缩略图、进行图像处理或打印。例如:

  • 在网页或系统中展示 PDF 页面预览;
  • 将发票或报表转换为 PNG/JPG 方便打印或嵌入其他文档;
  • 对 PDF 页面进行 OCR 或图像处理。

借助编程方式批量处理 PDF 转图片,能够大幅提高效率,保证输出一致性。本文将详细介绍如何使用 Java 将 PDF 转换为 PNG、JPG、TIFF 以及 SVG 格式,同时给出完整示例代码和解析。

环境准备

引入 Spire.PDF for Java

Spire.PDF for Java 是一个功能强大的 PDF 操作库,支持 PDF 的读取、编辑、转换等多种功能。

如果项目使用 Maven,可以在 pom.xml 中添加:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>11.8.3</version>
    </dependency>
</dependencies>

非 Maven 项目可直接下载 JAR 包并导入项目。引入完成后即可使用 import com.spire.pdf.* 操作 PDF 文档。

PDF 转 PNG / JPG

使用场景及说明:
当我们需要在网页或系统中展示 PDF 页面预览,或者生成报表、发票等文档的缩略图、便于打印或嵌入到其他文档中时,通常会选择将 PDF 转为位图格式(如 PNG 或 JPG)。PNG 支持透明背景,适合网页显示;JPG 压缩率高,适合打印或存储大量图像。以下示例展示如何将 PDF 的每一页转换为高分辨率图片,并保存为单独文件。

import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfImageType;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class PDFtoImage {
    public static void main(String[] args)throws IOException {
        // 实例化 PdfDocument
        PdfDocument pdf = new PdfDocument();

        // 加载 PDF 文档
        pdf.loadFromFile("示例文档.pdf");

        // 遍历 PDF 每一页
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            // 将页面保存为 Bitmap 图片,并设置水平和垂直分辨率
            BufferedImage image = pdf.saveAsImage(i, PdfImageType.Bitmap, 500500);

            // 保存为 PNG 文件
            File file = new File(String.format("转换图片-%d.png", i));
            ImageIO.write(image, "PNG", file);
        }

        // 关闭文档
        pdf.close();
    }
}

说明:

  • PdfDocument pdf = new PdfDocument();:创建 PDF 文档对象。
  • pdf.loadFromFile("示例文档.pdf");:加载待处理 PDF。
  • pdf.saveAsImage(i, PdfImageType.Bitmap, 500, 500);:将第 i 页转换为 Bitmap 图像,并设置 500×500 DPI。
  • ImageIO.write(image, "PNG", file);:将 BufferedImage 保存为 PNG 文件。将 "PNG" 改为 "JPEG" 即可生成 JPG 图片。

PDF 转 SVG

使用场景及说明:
如果希望在网页或应用程序中展示矢量预览,而不失真,SVG 是最佳选择。与位图不同,矢量图可以任意缩放,保证清晰度。使用 PDF 转 SVG 可以直接将 PDF 页面转换为可嵌入 HTML 的矢量图,适合需要动态缩放或进行前端渲染的场景。

import com.spire.pdf.*;

public class PDFToSVG {
    public static void main(String[] args) {
        // 创建 PdfDocument 对象
        PdfDocument pdf = new PdfDocument();

        // 加载 PDF 文档
        pdf.loadFromFile("示例文档.pdf");

        // 将 PDF 保存为 SVG
        pdf.saveToFile("转换结果.svg"FileFormat.SVG);
    }
}

说明:

  • FileFormat.SVG 指定输出为 SVG 格式。
  • 该方法将 PDF 文档页面保存为多个 SVG 文件,适合矢量图预览或网页嵌入。

PDF 转 TIFF

使用场景及说明:
TIFF 格式常用于打印、档案保存和多页图像处理。与 PNG/JPG 不同,TIFF 支持多页文档,可以一次性保存整个 PDF 或指定页码。此方法适合需要生成多页打印文档、档案存储或在图像处理软件中进一步处理 PDF 内容的场景。

import com.spire.pdf.*;

public class PDFtoTiff {
    public static void main(String[] args) {
        // 加载 PDF 文档
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("示例文档.pdf");

        // 保存整篇文档为 TIFF
        pdf.saveToTiff("转换结果.tiff");

        // 保存指定页面范围为 TIFF(第 2 页到第 3 页,设置 DPI)
        pdf.saveToTiff("转换结果部分.tiff"12400600);
    }
}

说明:

  • saveToTiff(String fileName):将整个 PDF 转为 TIFF 文件。
  • saveToTiff(String fileName, int startPage, int endPage, int xDpi, int yDpi):只转换指定页,并设置水平和垂直分辨率。

批量 PDF 转图片

使用场景及说明:
在实际项目中,经常会遇到需要处理大量 PDF 文件的需求,例如批量生成报表预览图、发票图片或图像备份。手动处理效率低且容易出错,使用程序批量处理可大幅提高效率,并保持输出一致性。

import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfImageType;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class BatchPDFtoImage {
    public static void main(String[] args) throws IOException {
        // 指定 PDF 文件夹
        File folder = new File("pdf文件夹");
        File[] files = folder.listFiles((dir, name) -> name.endsWith(".pdf"));

        for (File file : files) {
            // 加载 PDF
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromFile(file.getAbsolutePath());

            // 遍历每页并保存为 PNG
            for (int i = 0; i < pdf.getPages().getCount(); i++) {
                BufferedImage image = pdf.saveAsImage(i, PdfImageType.Bitmap, 300300);
                String outputFile = "图片输出/" + file.getName().replace(".pdf""_页_" + (i + 1) + ".png");
                ImageIO.write(image, "PNG"new File(outputFile));
            }

            System.out.println(file.getName() + " 已成功转换为图片");
            pdf.close();
        }
    }
}

说明:

  • 遍历指定文件夹中所有 PDF 文件,逐一处理。
  • 每页 PDF 保存为 PNG,并自动生成文件名。
  • 设置 300×300 DPI,适合一般显示和打印。

总结

本文详细介绍了如何使用 Java 将 PDF 文档转换为多种图片格式,包括 PNG、JPG、TIFF 和 SVG。通过设置分辨率、指定页码和批量处理,可以满足不同应用场景的需求,如网页预览、打印、图像处理等。

掌握 PDF 转图片的编程方法,能够提高开发效率,确保输出效果一致,是开发者在 PDF 自动化处理中的常用技能。