如何在 Java 中合并 PDF 和 DOCX 并将 DOCX 转换为 PDF

在本教程中,您将了解如何使用 GroupDocs.Merger for Java 合并 PDF 和 DOCX 文件 并 将 DOCX 转换为 PDF。您将看到如何从流加载文档,处理多千兆字节的负载,并生成可以保存到磁盘、发送给客户端或存储在云存储中的单一输出。完成后,您将拥有一个可直接使用的代码片段,可嵌入任何 Web 服务、批处理作业或微服务架构。

快速答案

  • 在 Java 中保存合并文档的主要方式是什么? 在添加所有源文件后调用 Merger.save(OutputStream)。
  • GroupDocs.Merger 能合并不同文件格式吗? 可以——它支持 30 多种输入和输出格式,包括 DOCX、PDF、PPTX、XLSX 以及多种图像类型。
  • 如何从 InputStream 加载文档? 使用流实例化 Merger:new Merger(stream)。
  • 对于大文档应该怎么办? 使用缓冲流,批量处理文件,并尽快关闭每个流,以保持低内存使用。
  • 生产环境是否需要许可证? 是的——有效的 GroupDocs 许可证可解锁全部功能并去除评估水印。

什么是合并 PDF 和 DOCX?

合并 PDF 和 DOCX 是指将一个或多个 PDF 和 Word 文档合并为单个文件,同时保留每个源文件的页面顺序、元数据和视觉保真度。使用 GroupDocs.Merger,您还可以将合并操作视为一种快速的 将 DOCX 转换为 PDF 方法,即将 DOCX 内容追加到 PDF 容器中,然后将结果保存为 PDF。

为什么使用 GroupDocs.Merger 合并不同文件格式?

GroupDocs.Merger 抽象了每种格式的底层细节,让您专注于业务规则。该库可以处理 30 多种格式,在不将整个文档加载到内存的情况下处理高达 500 MB 的文件,并确保页码、页眉和页脚在合并输出中保持完整。

前置条件

  • GroupDocs.Merger for Java 库
  • Java 8+(JDK 8 或更高)
  • 用于依赖管理的 Maven 或 Gradle
  • 如 IntelliJ IDEA 或 Eclipse 的 IDE
  • 用于生产环境的有效 GroupDocs 许可证(提供免费试用)

设置 GroupDocs.Merger for Java

Maven

在您的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-merger</artifactId>
    <version>latest-version</version>
</dependency>

Gradle

在您的 build.gradle 中加入:

implementation 'com.groupdocs:groupdocs-merger:latest-version'

直接下载

或者,从 GroupDocs.Merger for Java releases 下载最新版本,并手动将其添加到项目的类路径中。

许可证获取步骤

  1. 免费试用 – 在无需信用卡的情况下探索核心功能。
  2. 临时许可证 – 在 临时许可证页面(temporary license page)请求短期密钥。
  3. 完整购买 – 获取用于商业部署的无限制生产许可证。您可以直接从 GroupDocs(GroupDocs)购买完整许可证。

基本初始化

Merger 类是所有操作的入口点;它代表一次合并会话。添加库后,创建一个 Merger 实例:

import com.groupdocs.merger.Merger;

// Initialize GroupDocs Merger
erMerger = new Merger("YOUR_DOCUMENT_DIRECTORY/SAMPLE_DOCX");

如何从流加载文档?

从 InputStream 加载文档可以处理来自 HTTP 上传、云存储或内存生成的文件。InputStream 是 Java 的抽象,用于从文件、网络套接字或内存缓冲区等来源读取字节,使库能够在不创建磁盘临时文件的情况下处理数据。这种方式降低了 I/O 开销,并提升了高吞吐服务的性能。

步骤 1 – 创建输入流

import java.io.FileInputStream;
import java.io.InputStream;

InputStream stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/SAMPLE_DOCX");

为什么? 流将物理文件转换为字节序列,Merger 可以在不将其持久化到磁盘的情况下读取。

步骤 2 – 使用流初始化 Merger

Merger merger = new Merger(stream);

为什么? 提供流可实现内存内处理,非常适合无服务器函数或高吞吐 API。

如何在 Java 中保存合并文档?

合并后,您必须将合并后的内容持久化到所选目标。OutputStream 是 Java 的抽象,用于将字节写入文件、网络套接字或内存缓冲区等目标,为合并文档的交付方式提供灵活性。向 Merger.save 提供 OutputStream 可确保最终的 PDF 或 DOCX 高效且安全地写入。

步骤 1 – 定义输出流

import java.io.FileOutputStream;
import java.io.OutputStream;

OutputStream outputStream = new FileOutputStream("YOUR_OUTPUT_DIRECTORY/merged_output.docx");

为什么? OutputStream 告诉 Java 合并文件应写入何处,无论是磁盘、响应体还是云存储。

步骤 2 – 保存文档

merger.save(outputStream);

为什么? save() 完成合并,刷新缓冲区,并确保输出符合所选格式的规范。

步骤 3 – 关闭流

outputStream.close();

为什么? 关闭可释放操作系统句柄,并确保所有缓冲字节已持久化,防止文件损坏。

如何在 Java 中处理大文档?

如果直接加载,大型 PDF 或多千兆字节的 Word 文件会耗尽 JVM 堆内存。为保持内存使用受控,请将原始流包装在 BufferedInputStream 和 BufferedOutputStream 中,分批处理文件,并在每次操作后调用 Merger.close() 释放本机资源。监控堆使用情况并设置合适的 -Xmx 参数(目标为 ≤70 % 可用内存)可进一步防止内存溢出错误。

实际应用

GroupDocs.Merger 适用于以下实际任务:

  1. 批量报告生成 – 将每日 Excel 导出(XLSX)和 Word 摘要(DOCX)合并为单个 PDF 进行归档。
  2. 动态发票创建 – 将 PDF 发票模板与 DOCX 条款文档合并,然后将最终 PDF 交付给客户。
  3. 跨平台服务 – 暴露一个接受混合格式上传的 REST 端点,合并后流式返回结果,无需存储临时文件。

性能考虑因素

  • 内存管理 – 始终关闭流;库使用必须释放的本机缓冲区。
  • 批量操作 – 将文件分组可减少磁盘寻道次数,提升吞吐量最高可达 30 %。
  • 高效 I/O – 对于大于 10 MB 的文件,使用缓冲 I/O 可将处理时间大约减半。

常见问题及解决方案

问题原因解决方案
FileNotFoundException路径错误或权限不足验证绝对/相对路径并确保应用具有读写权限
IOException 在保存期间流未关闭或磁盘已满使用 try‑with‑resources,关闭流,并检查可用磁盘空间
大型 PDF 导致内存激增整个文件被加载到内存中改用缓冲流并分批处理

常见问答

问: 我可以使用 GroupDocs.Merger 合并不同文件格式吗?
答: 可以,库支持 30 多种格式——包括 DOCX、PDF、PPTX、XLSX 和常见图像类型——实现无缝的跨格式合并。

问: 如何高效处理大文档?
答: 将文件流包装在 BufferedInputStream/BufferedOutputStream 中,批量合并文件,并在使用后立即关闭每个流。

问: 是否支持受密码保护的文件?
答: 当然。构造 Merger 实例时提供密码即可打开加密的 PDF 或 DOCX 文件。

问: 我可以在商业产品中使用此库吗?
答: 可以,有效的 GroupDocs 许可证可解锁完整的生产功能且无评估水印。

问: 如果遇到 IOException 应该怎么办?
答: 再次检查文件路径,确保进程拥有足够的权限,验证磁盘空间,并在 I/O 调用中使用 try‑catch 块或 try‑with‑resources。

资源


最后更新: 2026-10-11
测试环境: GroupDocs.Merger 最新版本(截至 2026 年)
作者: GroupDocs

相关教程