You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java将多个PDF文件合并为单个文件

Java实现合并文件夹内所有PDF文件的方案

Java生态中处理PDF最常用的稳定开源工具为Apache PDFBox,以下是完整实现步骤:

1. 引入依赖

如果是Maven项目,在pom.xml中添加如下依赖:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.32</version>
    <!-- 可自行替换为官方最新稳定版本 -->
</dependency>

Gradle项目对应添加相同坐标即可。

2. 完整实现代码

代码逻辑包含文件夹PDF筛选、自定义排序、合并输出三个核心环节:

import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class PdfMergeTool {

    /**
     * 合并指定文件夹下所有PDF文件为一个PDF
     * @param folderPath 存放PDF的文件夹路径
     * @param outputFilePath 合并后输出的PDF完整路径
     * @throws IOException 读写异常
     */
    public static void mergeAllPdfInFolder(String folderPath, String outputFilePath) throws IOException {
        File pdfFolder = new File(folderPath);
        // 校验文件夹合法性
        if (!pdfFolder.exists() || !pdfFolder.isDirectory()) {
            throw new IllegalArgumentException("输入的文件夹路径不合法");
        }

        // 筛选所有后缀为.pdf的文件,可自行调整排序逻辑
        List<File> pdfFileList = Arrays.stream(
                        pdfFolder.listFiles((dir, fileName) -> fileName.toLowerCase().endsWith(".pdf"))
                )
                // 默认按文件名字典序排序,需要按数字自然序、修改时间排序可修改此处逻辑
                .sorted()
                .collect(Collectors.toList());

        if (pdfFileList.isEmpty()) {
            throw new IllegalArgumentException("目标文件夹下未找到PDF文件");
        }

        // 初始化PDF合并工具
        PDFMergerUtility merger = new PDFMergerUtility();
        merger.setDestinationFileName(outputFilePath);

        // 添加所有待合并PDF文件
        for (File pdfFile : pdfFileList) {
            merger.addSource(pdfFile);
        }

        // 执行合并操作
        merger.mergeDocuments(null);
    }

    // 测试调用示例
    public static void main(String[] args) {
        try {
            // 替换为实际的文件夹路径和输出路径
            mergeAllPdfInFolder("/Users/xxx/pdf_folder", "/Users/xxx/merged_output.pdf");
            System.out.println("PDF合并成功");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("合并失败:" + e.getMessage());
        }
    }
}

注意事项

  • 示例基于PDFBox 2.x版本编写,1.x版本API存在差异,建议优先使用2.x以上稳定版
  • 如果需要合并加密的PDF,需要提前调用PDFBox解密接口传入权限密码后再进行合并
  • 合并总大小超过1G的多份PDF时,建议调整JVM堆内存参数,避免出现内存溢出问题
  • 如果默认字典序排序无法满足需求(比如1.pdf、10.pdf、2.pdf的排序问题),可以替换sorted()方法中的排序逻辑,使用自然排序规则即可

内容的提问来源于stack exchange,提问作者Alex Pandian Bala Murugan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:54:03