在开发一个 word 相关处理功能中,有个业务需要配合 word 文件合并的实现,由于技术栈是使用nodejs,希望能直接调用 npm 包就能实现这个功能。在孜孜不倦的翻找各大佬库中,发现一个 docx-merger 库早已实现合并功能,但其对页眉页脚和分节页面样式等都没进行处理(毕竟几年没更新了)。
于是,为了适配业务需求,搓了一个npm包: **CombineWord**,它能帮助开发者快速实现多文档合并功能,同时(
尽量)完美保留原文档的样式、页眉页脚及元数据信息。
一、使用指南
1. 安装方式
通过 npm 包管理器安装:
npm install combine-word
2. Node.js 环境使用示例
const CombineWord = require("combine-word");
const fs = require("fs");
// 读取多个Word文件(Buffer格式)
const file1 = fs.readFileSync("document1.docx");
const file2 = fs.readFileSync("document2.docx");
// 配置合并参数并初始化实例
const combine = new CombineWord(
{
pageBreak: true, // 文档间插入分页符
title: "年度报告合集", // 合并后标题
author: "John Doe" // 作者信息
},
[file1, file2] // 待合并文件数组
);
// 保存为Node Buffer格式
combine.save("nodebuffer", (fileData) => {
fs.writeFileSync("merged_report.docx", fileData);
console.log("合并完成!");
});
3. 浏览器环境使用示例
<!-- 引入库文件 -->
<script src="combine-word.js"></script>
<script>
// 处理文件选择事件
const handleFileSelect = async (files) => {
const filePromises = [];
// 将文件转换为ArrayBuffer格式
for (const file of files) {
filePromises.push(
new Promise((resolve) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.readAsArrayBuffer(file);
})
);
}
// 合并文件
const fileBuffers = await Promise.all(filePromises);
const combineWord = new CombineWord(
{ pageBreak: false }, // 不插入分页符
fileBuffers
);
// 保存为Blob对象并触发下载
combineWord.save("blob", (blob) => {
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = "merged_documents.docx";
link.click();
});
};
</script>
<!-- 文件选择控件 -->
<input type="file" multiple onchange="handleFileSelect(this.files)" />
二、API 详细说明
构造函数:CombineWord(options, files)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
files | Array | 是 | 待合并的 Word 文件数组(Node.js 中为 Buffer ,浏览器中为 ArrayBuffer ) |
options | Object | 否 | 配置参数对象 |
-- 配置参数(options
)
字段 | 类型 | 默认值 | 说明 |
---|---|---|---|
pageBreak | Boolean | false | 是否在文档间插入分页符 |
title | String | "" | 合并后文档标题 |
subject | String | "" | 文档主题 |
author | String | "" | 作者信息 |
keywords | String | "" | 关键词(多个用逗号分隔) |
description | String | "" | 文档描述 |
lastModifiedBy | String | "" | 最后修改者 |
version | String | "" | 版本号 |
保存方法:save(type, callback)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
type | String | 是 | 保存类型(nodebuffer 或 blob ) |
callback | Function | 是 | 回调函数,返回合并后的文件数据(Node.js 中为 Buffer ,浏览器中为 Blob ) |
三、最佳实践建议
- 大文件处理:对于超过 100MB 的文档,建议在 Node.js 环境中处理,避免浏览器内存溢出
- 格式兼容性:确保待合并文档使用统一的样式模板(推荐使用
.docx
模板文件) - 错误处理: 添加文件类型校验(仅允许
.docx
格式)和异常捕获机制 - 性能优化: 在浏览器环境中可使用 Web Worker 进行后台合并,避免阻塞主线程
四、兼容性与依赖
环境支持
- Node.js >= v12.0.0
- 现代浏览器(Chrome/Edge/Firefox/Safari)
文件格式
- 仅支持
.docx
格式(OpenXML 标准),不支持旧版.doc
格式
五、总结
CombineWord 实现了基础的 Word 合并功能,对复杂场景(如多层表格、文本框、图形等)进行了基础适配。若遇到问题,欢迎提交 GitHub Issue。
项目地址:https://github.com/siisiooy/combine-word
问题反馈:优先通过 GitHub Issue 反馈,或在博客下方留言
作者:诗诗ooy
发布时间:2025 年 5 月 22 日