A fast and lightweight Node.js library written in TypeScript for merging two Microsoft Word (.docx
) documents into one. Easily insert content at specific positions or based on placeholder patterns.
Install via npm:
npm install @benedicte/docx-merge
Only two lightweight dependencies:
-
adm-zip
– for extracting and rebuilding .docx (ZIP) files -
fast-xml-parser
– for parsing and modifying the DOCX XML content
mergeDocx(
sourcePath: string,
contentPath: string,
options: {
outputPath?: string;
pattern?: string;
insertStart?: boolean;
insertEnd?: boolean;
}
): void | buffer
Parameters:
-
sourcePath
(required) – Path to the base.docx
file -
contentPath
(required) – Path to the.docx
file to insert into the base -
options
:-
outputPath
– If provided, writes the merged document to this path. If omitted, returns aBuffer
-
pattern
– String pattern in the source file to replace with the inserted content -
insertStart
– Insert the content at the beginning of the source file -
insertEnd
– Insert the content at the end of the source file
-
🔔 Note: You can combine pattern, insertStart, and insertEnd and at least one is required.
import { mergeDocx } from "@benedicte/docx-merge";
mergeDocx("./source.docx", "./table.docx", {
outputPath: "./output.docx",
pattern: "{{table}}",
});
import { mergeDocx } from "@benedicte/docx-merge";
const buffer = mergeDocx("./source.docx", "./table.docx", {
pattern: "{{table}}",
});
// Use buffer (e.g., send as a response in a server)
import { mergeDocx } from "@benedicte/docx-merge";
mergeDocx("./source.docx", "./table.docx", {
outputPath: "./output.docx",
insertStart: true,
});
import { mergeDocx } from "@benedicte/docx-merge";
mergeDocx("./source.docx", "./table.docx", {
outputPath: "./output.docx",
insertEnd: true,
});
This project uses Vitest for unit testing.
To run tests:
npm run test
MIT
Contributions, bug reports, and feature requests are welcome! Feel free to open an issue or submit a pull request.