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

如何在Node.js中合并docx文档 解决页眉异常、合并分页问题

Node.js合并docx文档的本地实现方案

核心依赖选择

推荐使用目前生态维护最活跃的docx库来实现,可完全解决你遇到的两个核心问题:页眉冲突异常、默认分页拼接。

实现思路

  • 处理页眉异常:仅保留首个文档的页眉页脚配置,后续导入的文档直接过滤掉页眉、页脚相关的XML节点,避免节点重复冲突报错
  • 实现同页拼接:导入后续文档内容时,不手动插入分页符,直接将文档内容节点追加到已有文档body的末尾位置即可

具体实现代码

第一步:安装依赖

npm install docx @xmldom/xmldom fs-extra

第二步:核心拼接逻辑

const { Document, Packer, parse } = require("docx");
const fs = require("fs-extra");

async function mergeDocx(filePaths, outputPath) {
  if (filePaths.length === 0) throw new Error("待合并文件列表不能为空");
  
  // 加载首个文档,保留其页眉页脚、样式配置
  const firstFileBuffer = await fs.readFile(filePaths[0]);
  const firstDoc = await parse(firstFileBuffer);
  const mergedContent = [...firstDoc.sections[0].children];

  // 遍历处理后续文档
  for (let i = 1; i < filePaths.length; i++) {
    const fileBuffer = await fs.readFile(filePaths[i]);
    const currentDoc = await parse(fileBuffer);
    // 追加当前文档的所有正文内容,不插入分页符
    mergedContent.push(...currentDoc.sections[0].children);
  }

  // 导出合并后的文档
  const mergedDoc = new Document({
    sections: [{
      children: mergedContent,
      headers: firstDoc.sections[0].headers,
      footers: firstDoc.sections[0].footers
    }]
  });

  const buffer = await Packer.toBuffer(mergedDoc);
  await fs.writeFile(outputPath, buffer);
}

// 调用示例
mergeDocx(
  ["./doc1.docx", "./doc2.docx", "./doc3.docx"],
  "./merged-output.docx"
).then(() => {
  console.log("合并完成");
}).catch(err => {
  console.error("合并失败:", err);
});

特殊场景适配

  • 如果需要保留每个文档的独立页眉页脚,可以给每个文档的内容单独创建一个section,并且将该section的分页属性设置为continuous,即可实现不分页同时保留独立页眉
  • 如果对格式兼容性要求极高,也可以直接修改原生docx-merger的源码:注释掉插入分页符的代码行,同时在导入页眉逻辑处增加判断,已存在页眉时跳过后续文档的页眉导入,也可满足需求

内容的提问来源于stack exchange,提问作者rhrhgut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:05