The patcher allows you to modify existing documents, and add new content to them.
!> The Patcher requires an understanding of Paragraphs.
import * as fs from "fs";
import { patchDocument } from "docx";
patchDocument(fs.readFileSync("My Document.docx"), {
patches: {
// Patches here
},
});
The patcher takes in a patches
object, which is a map of string
to Patch
:
interface Patch {
type: PatchType;
children: FileChild[] | ParagraphChild[];
}
Property | Type | Notes | Possible Values |
---|---|---|---|
type | PatchType |
Required | DOCUMENT , PARAGRAPH |
children | FileChild[] or ParagraphChild[] |
Required | The contents to replace with. A FileChild is a Paragraph or Table , whereas a ParagraphChild is typical Paragraph children. |
The patcher also takes in a keepOriginalStyles
boolean, which will preserve the styles of the patched text when set to true.
- Open your existing word document in your favorite Word Processor
- Write tags in the document where you want to patch in a mustache style notation. For example,
{{my_patch}}
and{{my_second_patch}}
. - Run the patcher with the patches as a key value pair.
?> Notice how there is no handlebar notation in the key.
The patch can be as simple as a string, or as complex as a table. Images, hyperlinks, and other complex elements within the docx
library are also supported.
patchDocument(fs.readFileSync("My Document.docx"), {
patches: {
my_patch: {
type: PatchType.PARAGRAPH,
children: [new TextRun("Sir. "), new TextRun("John Doe"), new TextRun("(The Conqueror)")],
},
my_second_patch: {
type: PatchType.DOCUMENT,
children: [
new Paragraph("Lorem ipsum paragraph"),
new Paragraph("Another paragraph"),
new Paragraph({
children: [
new TextRun("This is a "),
new ExternalHyperlink({
children: [
new TextRun({
text: "Google Link",
}),
],
link: "https://www.google.co.uk",
}),
new ImageRun({ type: 'png', data: fs.readFileSync("./demo/images/dog.png"), transformation: { width: 100, height: 100 } }),
],
}),
],
},
},
});
Source: https://github.com/dolanmiu/docx/blob/master/demo/85-template-document.ts