Java: 合并 Word 文档

3 阅读2分钟

在 Java 开发项目中,经常需要将多个 Word 文档合并成一个完整文件,例如生成报告、合同汇总或文档归档。传统方式需要手动复制粘贴,不仅费时还容易出错。通过 Spire.Doc for Java 库,我们可以轻松实现这一操作。它提供了直观的 API,支持两种常用合并方式:一种会在新页面插入完整文档,另一种则连续追加内容而不换页。

前提准备

首先在项目中引入 Spire.Doc for Java 依赖(推荐使用 Maven):

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.3.1</version>
    </dependency>
</dependencies>

下载 JAR 包后添加到 classpath 即可。代码中主要使用 com.spire.doc.* 包。

方法一:整文档插入(新页面开始)

适合需要清晰分页的场景。Spire.Doc 的 insertTextFromFile() 方法可直接将整个文档插入。

import com.spire.doc.*;

public class MergeByInsert {
    public static void main(String[] args) {
        // 加载主文档
        Document document = new Document("input/Sample1.docx");
        
        // 依次插入其他文档(从新页面开始)
        document.insertTextFromFile("input/Sample2.docx", FileFormat.Docx_2013);
        document.insertTextFromFile("input/Sample3.docx", FileFormat.Docx_2013);
        
        // 保存合并结果
        document.saveToFile("output/Merged.docx", FileFormat.Docx_2013);
    }
}

方法二:内容克隆追加(连续流式合并)

如果不想强制分页,可以克隆第二个文档的所有内容追加到第一个文档的末尾。适合保持统一格式的场景。

import com.spire.doc.*;

public class MergeByClone {
    public static void main(String[] args) {
        // 加载第一个文档作为基础
        Document mainDoc = new Document("input/Sample1.docx");
        
        // 支持合并多个文档
        String[] files = {"input/Sample2.docx", "input/Sample3.docx"};
        
        for (String file : files) {
            Document tempDoc = new Document(file);
            for (Object secObj : (Iterable) tempDoc.getSections()) {
                Section sec = (Section) secObj;
                for (Object obj : (Iterable) sec.getBody().getChildObjects()) {
                    DocumentObject item = (DocumentObject) obj;
                    // 追加到主文档最后一段
                    mainDoc.getLastSection().getBody().getChildObjects().add(item.deepClone());
                }
            }
        }
        
        mainDoc.saveToFile("output/Merged.docx", FileFormat.Docx_2013);
    }
}

实用提示

  • 错误处理:建议在加载文档前添加 try-catch 捕获 Exception,并检查文件路径是否存在。
  • 格式保留:两种方法均能较好保留原样式、表格、图片。如果需要更精细控制,可先获取 ParagraphTable 对象再追加。
  • 批量合并:将文件路径放入列表或文件夹扫描,实现自动化处理。
  • 性能:对于大文件,推荐分批处理或使用临时许可证移除评估水印。

通过以上代码,你可以在几分钟内完成合并功能,极大提升开发效率。实际项目中可封装成工具类,复用更方便。