如何使用 Java 合并两个 PDF 文件
将 PDF 文档合并为单个文件是文档管理流程中常见的需求。 汇总月度报告、组装多联表格以及捆绑发票都是常见的场景。 IronPDF for Java 将该操作简化为一次方法调用:PdfDocument.merge()。 向其输入两个或多个已加载的文档,即可获得一个合并后的 PDF 文件,其中所有格式、字体和嵌入的图片均被精确保留。
本指南将详细介绍四种最实用的合并场景:合并动态生成的 PDF、合并磁盘上的现有文件、使用基于列表的方法处理更大批量文件,以及控制最终文档中的页面顺序。
快速入门:在 Java 中合并 PDF 文件
- 将 IronPDF 依赖项添加到您的 Maven 配置中
pom.xml - 导入
com.ironsoftware.ironpdf.PdfDocument - 使用
PdfDocument.fromFile()加载源文件 - 调用
PdfDocument.merge(pdf1, pdf2)以生成合并文档 - 将结果保存为
merged.saveAs()
```java {title="快速入门:基础 PDF 合并"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/quickstart-merge.java import com.ironsoftware.IronPdf.PdfDocument; import java.nio.file.Paths;
// 从磁盘加载两个现有的 PDF 文档 PdfDocument pdf1 = PdfDocument.fromFile(Paths.get("document1.pdf")); PdfDocument pdf2 = PdfDocument.fromFile(Paths.get("document2.pdf"));
// 合并为单个文档; 格式和图片均予以保留 PdfDocument merged = PdfDocument.merge(pdf1, pdf2);
// 将合并后的 PDF 写入磁盘 merged.saveAs(Paths.get("merged-output.pdf"));
<div class="hsg-featured-snippet">
<h3>简易工作流程(5个步骤)</h3>
1. 将 IronPDF 添加为 Maven 或 Gradle 依赖项
2. 导入 `com.ironsoftware.ironpdf.PdfDocument`
3. 使用 `PdfDocument.fromFile(Paths.get("file.pdf"))` 加载每个 PDF
4. 调用 `PdfDocument.merge(pdf1, pdf2)`,或传递 `PdfDocument[]` 数组以处理批量操作
5. 将合并后的结果保存为 `merged.saveAs(Paths.get("output.pdf"))`
</div>
## 在 Java 中合并 PDF 文件有哪些先决条件?
在编写任何代码之前,请确认以下四项要求已满足:
1. 已安装 **Java 8 或更高版本**,并设置了 `JAVA_HOME` 环境变量。 有关特定平台的操作说明,请参阅 [Java 下载和安装指南](https://www.java.com/en/download/help/download_options.html#windows)。
2. **一款 Java 集成开发环境**(本指南使用 [JetBrains IntelliJ IDEA](https://www.jetbrains.com/idea/download/#section=windows),但 [Eclipse](https://www.eclipse.org/downloads/) 同样适用)。
3. 在您的 IDE 中配置 **Maven 或 Gradle**。如果您是 Maven [新手,JetBrains](https://www.jetbrains.com/idea/guide/tutorials/marco-codes-maven/installing-maven/) 的[ Maven 安装指南](https://www.jetbrains.com/idea/guide/tutorials/marco-codes-maven/installing-maven/)涵盖了在 IntelliJ 中的配置方法。
4. **将 IronPDF 库**添加为项目依赖项。 《[IronPDF for Java 安装指南](https://ironpdf.com/java/docs/)》详细介绍了 Maven 和 Gradle 两种安装方法。
请注意IronPDF for Java 支持 Java 8 及更高版本。 无需将现有项目升级到新版 JDK 即可开始使用。)}]
## 如何安装 IronPDF for Java?
IronPDF for Java 通过 [Maven Central](https://search.maven.org) 分发,因此只需几行配置代码即可将其添加到您的项目中。 无需手动下载 JAR 文件。
打开 IntelliJ IDEA,通过**"文件"->"新建"->"项目**"创建一个新的 Maven 项目,并选择 Maven 作为构建系统。

为项目命名并点击**"完成**"。 IntelliJ 会在生成项目结构后自动打开 `pom.xml`。

请在 `pom.xml` 的 `<dependencies>` 部分内添加以下依赖项代码块。 请务必[在 Maven Central 上](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf)查看 [IronPDF 的最新版本](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf),并将版本字符串替换为当前版本。
```xml {title="pom.xml: IronPDF 依赖项"}
//:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/pom-dependency.xml
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>2024.9.1</version>
</dependency>

保存 pom.xml 后,编辑器右上角会出现一个小型的同步图标。 点击此处以触发 Maven 依赖项的下载。 根据您的网络连接速度,此过程通常需要 15 秒至几分钟,并会下载 IronPDF 及其所有必需的传递依赖项。

build.gradle 依赖项块中添加 implementation 'com.ironsoftware:ironpdf:2024.9.1' 代替。 (同一 Maven Central 构建产物适用于这两种构建系统。如何创建和合并新的 PDF 文档?
当源内容在运行时生成(来自 HTML 模板、数据库记录或用户输入)时,工作流程是先将每个片段渲染为 PdfDocument,然后将其合并。
PdfDocument.renderHtmlAsPdf() 将 HTML 字符串在内存中转换为 PDF。 每次调用都会生成一个独立的文档对象,该对象可直接传递给 merge(),无需将任何中间文件写入磁盘。
合并前渲染 HTML 部分
下面的示例将两个独立的 HTML 字符串加载到内存中,并将其合并为一个文档。 此模式适用于报表生成器、发票Builder,以及任何通过编程方式从模板或数据库行中组装内容的系统。
```java {title="合并动态生成的 PDF"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-html-pdfs.java import com.ironsoftware.IronPdf.PdfDocument; import java.io.IOException; import java.nio.file.Paths;
public class Main { public static void main(String[] args) throws IOException { // 每个文档部分的 HTML 内容 String htmlA = "
First part of the report.
"; String htmlB = "Second part of the report.
"; // 将每个 HTML 字符串在内存中渲染为 PDF —— 无需写入磁盘
PdfDocument pdfA = PdfDocument.renderHtmlAsPdf(htmlA);
PdfDocument pdfB = PdfDocument.renderHtmlAsPdf(htmlB);
// 将两份文档合并为一个PDF文件
PdfDocument merged = PdfDocument.merge(pdfA, pdfB);
// 保存合并后的结果
merged.saveAs(Paths.get("assets/merged.pdf"));
}
}
合并后的输出按参数顺序拼接页面:`pdfA` 页面出现在 `pdfB` 页面之前。 如需了解 HTML 渲染引擎的完整操作指南,请参阅 [IronPDF for Java](https://ironpdf.com/java/tutorials/html-to-pdf/) 的 [HTML 转 PDF 教程](https://ironpdf.com/java/tutorials/html-to-pdf/)。

重要 `renderHtmlAsPdf()` 调用使用基于 Chromium 的渲染引擎。全面支持 CSS、网页字体和内联图片——输出效果与浏览器显示完全一致。
## 如何合并现有的 PDF 文件?
从磁盘加载 PDF 并将其合并的操作遵循相同的模式,即使用 `PdfDocument.fromFile()` 将每个文件读入内存,然后将对象传递给 `merge()`。
此方案适用于源文档已存在的任何工作流程——例如扫描的发票、导出的报告或从外部系统接收的文件。 IronPDF 会读取 PDF 结构并合并页面,且不会更改原始源文件。
### 从磁盘加载和合并文件
```java {title="合并磁盘上的现有 PDF 文件"}
//:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-existing-files.java
import com.ironsoftware.IronPdf.PdfDocument;
import java.io.IOException;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) throws IOException {
// 从磁盘加载两个现有的 PDF 文件
PdfDocument pdfA = PdfDocument.fromFile(Paths.get("assets/invoice-january.pdf"));
PdfDocument pdfB = PdfDocument.fromFile(Paths.get("assets/invoice-february.pdf"));
// 合并为一个文档
PdfDocument merged = PdfDocument.merge(pdfA, pdfB);
// 写入合并后的输出内容 -- 原文保持不变
merged.saveAs(Paths.get("assets/invoices-q1.PDF"));
}
}
merge() 调用会生成一个新的 PdfDocument 对象; 既不修改 pdfA,也不修改 pdfB。 若需执行反向操作(即重新提取页面),请参阅 Java 版拆分 PDF 示例。

fromFile() 支持哪些文件格式?
PdfDocument.fromFile() 支持标准 .pdf 文件格式。 对于需要转换后才能合并的文档(例如 HTML 文件、图像文件或其他格式),请先使用适当的渲染方法(renderUrlAsPdf()) 生成 PdfDocument,再将该对象传递给 merge()。
fromFile() 的路径可以是绝对路径,也可以是相对于工作目录的相对路径。 为确保跨平台兼容性,建议使用 Paths.get()(来自 java.nio.file)。}}]如何合并两个以上的 PDF 文件?
PdfDocument.merge() 支持可变长度参数列表,因此从语法上讲,合并三到四个文档与合并两个文档并无区别。 对于动态大小的集合(即 PDF 数量在运行时确定),传递一个 PdfDocument[] 数组是更简洁的方法。
可变参数与基于列表的模式
以下两种写法产生的结果完全相同。 当文件数量固定时,请选择直接调用 varargs;若需通过编程方式构建集合,请采用列表转数组模式:
```java {title="合并四个 PDF 文件——可变参数与列表方法"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-multiple-files.java import com.ironsoftware.IronPdf.PdfDocument; import java.io.IOException; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List;
public class Main { public static void main(String[] args) throws IOException { // 加载四个现有的 PDF 文件 PdfDocument pdfA = PdfDocument.fromFile(Paths.get("assets/chapter-1.pdf")); PdfDocument pdfB = PdfDocument.fromFile(Paths.get("assets/chapter-2.pdf")); PdfDocument pdfC = PdfDocument.fromFile(Paths.get("assets/chapter-3.pdf")); PdfDocument pdfD = PdfDocument.fromFile(Paths.get("assets/chapter-4.pdf"));
// 模式 1:直接调用可变参数 -- 适用于文件数量固定的情况
PdfDocument merged = PdfDocument.merge(pdfA, pdfB, pdfC, pdfD);
merged.saveAs(Paths.get("assets/full-document.pdf"));
// 模式 2:先构建列表——当文件数量动态变化时推荐使用
List<pdfdocument> pdfList = new ArrayList<>();</pdfdocument>
pdfList.add(pdfA);
pdfList.add(pdfB);
pdfList.add(pdfC);
pdfList.add(pdfD);
PdfDocument mergedFromList = PdfDocument.merge(
pdfList.toArray(new PdfDocument[0])
);
mergedFromList.saveAs(Paths.get("assets/full-document-v2.pdf"));
}
}
重要输出页面的顺序必须与参数顺序完全一致。 如果文档顺序很重要——例如书籍的章节或表单的有序部分——请在调用 `merge()`. 之前对列表进行排序。)}]
### 如何扫描目录并合并所有 PDF 文件?
当在编译时无法确定输入文件集时,从目录中读取文件路径是列表模式的自然延伸。 下面的代码片段会从文件夹中收集所有 `.pdf` 文件,按文件名排序,并按顺序合并它们。
```java {title="扫描目录并合并所有 PDF 文件"}
//:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-directory-pdfs.java
import com.ironsoftware.IronPdf.PdfDocument;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
Path inputDir = Paths.get("assets/monthly-reports");
// 从目录中收集所有 PDF 文件,并按文件名排序
List<path> pdfPaths = Files.list(inputDir)</path>
.filter(p -> p.toString().endsWith(".pdf"))
.sorted(Comparator.comparing(Path::getFileName))
.collect(Collectors.toList());
// 将每个文件加载到 PdfDocument 中
List<pdfdocument> documents = new ArrayList<>();</pdfdocument>
for (Path path : pdfPaths) {
documents.add(PdfDocument.fromFile(path));
}
// 合并所有文档并保存结果
PdfDocument combined = PdfDocument.merge(
documents.toArray(new PdfDocument[0])
);
combined.saveAs(Paths.get("assets/annual-report.pdf"));
}
}
此模式可处理任意大小的文件夹。对于大型批次(50 个以上文件),建议分批加载并合并,以限制峰值内存使用,而非同时加载所有文件。
2024-02.pdf),请使用自定义 Comparator 对 pdfPaths 进行排序。 (对于带零填充的月份数字,按字母顺序排序效果自然。合并后,您可能需要进一步润色合并后的文档。 IronPDF for Java 支持添加自定义页眉和页脚、应用水印,以及压缩最终输出文件,以便在交付前减小文件大小。
Java 中的 PDF 合并下一步该怎么做?
本指南介绍了使用 IronPDF for Java 的四种合并模式:在合并前将 HTML 内容渲染为 PDF、从磁盘加载并合并现有文件、使用列表处理可变长度的文档批次,以及扫描目录以自动合并所有 PDF 文件。 在所有情况下,PdfDocument.merge() 都会保留源文本的格式——字体、图片和页面布局将直接保留在输出中,无需任何额外配置。
若想进一步了解 IronPDF for Java 的功能,请参阅 Java 合并 PDF 教程以获取更多示例,或查阅如何在 Java 中对 PDF 进行数字签名,以便在合并后的输出文件中添加签名。 关于页面级操作(如重新排序、删除或提取单个页面),请参阅"删除特定页面"示例。
常见问题解答
在 Java 中合并 PDF 文件的最简单方法是什么?
最简单的方法是IronPDF for Java的PdfDocument.merge(pdf1, pdf2)。 使用PdfDocument.fromFile(Paths.get("file.pdf"))加载每个文件,传递两个文件给merge(),并用merged.saveAs()保存结果。
在Java中使用IronPDF合并PDF的前提条件是什么?
您需要Java 8或更高版本,设置JAVA_HOME,一个Java IDE,如IntelliJ IDEA或Eclipse,配置Maven或Gradle,并将IronPDF依赖项添加到您的项目的pom.xml或build.gradle文件中。
我可以一次合并超过两个的PDF文件在Java中吗?
可以。 PdfDocument.merge()接受可变长度参数列表,因此您可以直接传递三个或更多PdfDocument对象。 对于动态集合,将List<PdfDocument>转换为数组,使用list.toArray(new PdfDocument[0]),并将其传递给merge()。
在Java中合并PDF时如何控制页面顺序?
页面在输出中按传递给merge()的参数顺序出现。 如果您正在动态构建列表,请在调用merge()之前对其进行排序——例如,按文件名或文档元数据中的日期字段排序。
如何在Java中合并从HTML生成的PDF?
对每个HTML部分调用PdfDocument.renderHtmlAsPdf(htmlString)生成内存中的PdfDocument,然后将这些对象传递给PdfDocument.merge()。不写入中间文件到磁盘。
合并后我可以在Java中执行哪些额外的PDF操作?
合并后,IronPDF for Java支持添加页眉和页脚、应用自定义水印、压缩输出以减少文件大小、添加数字签名、提取或删除单个页面以及填写表单字段。


