From c206d23480d95f5a73df372b474f9fe06dfbb2b3 Mon Sep 17 00:00:00 2001 From: Dolan Miu Date: Thu, 16 Feb 2023 20:17:48 +0000 Subject: [PATCH] work on docx patcher --- demo/85-template-document.ts | 6 ++++-- demo/assets/simple-template.docx | Bin 0 -> 12379 bytes demo/template.docx | Bin 14233 -> 0 bytes src/templater/from-docx.ts | 13 ++++++++++++- src/templater/replacer.ts | 15 +++++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 demo/assets/simple-template.docx delete mode 100644 demo/template.docx create mode 100644 src/templater/replacer.ts diff --git a/demo/85-template-document.ts b/demo/85-template-document.ts index d219170491..43e345b0b0 100644 --- a/demo/85-template-document.ts +++ b/demo/85-template-document.ts @@ -1,8 +1,10 @@ // Simple template example // Import from 'docx' rather than '../build' if you install from npm import * as fs from "fs"; -import { fromDocx } from "../build"; +import { Paragraph, patchDocument, TextRun } from "../build"; -fromDocx(fs.readFileSync("demo/template.docx")).then((doc) => { +patchDocument(fs.readFileSync("demo/assets/simple-template.docx"), { + children: [new Paragraph("ff"), new TextRun("fgf")], +}).then((doc) => { fs.writeFileSync("My Document.docx", doc); }); diff --git a/demo/assets/simple-template.docx b/demo/assets/simple-template.docx new file mode 100644 index 0000000000000000000000000000000000000000..c9afe4f66dd93bd80a191133b469030453b61a4c GIT binary patch literal 12379 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 diff --git a/src/templater/from-docx.ts b/src/templater/from-docx.ts index cec1a84877..b17bbf1f90 100644 --- a/src/templater/from-docx.ts +++ b/src/templater/from-docx.ts @@ -1,16 +1,27 @@ import * as JSZip from "jszip"; import { xml2js, ElementCompact, js2xml } from "xml-js"; +import { replacer } from "./replacer"; // eslint-disable-next-line functional/prefer-readonly-type type InputDataType = Buffer | string | number[] | Uint8Array | ArrayBuffer | Blob | NodeJS.ReadableStream; -export const fromDocx = async (data: InputDataType): Promise => { +export interface PatchDocumentOptions { + readonly children: any[]; +} + +export const patchDocument = async (data: InputDataType, options: PatchDocumentOptions): Promise => { const zipContent = await JSZip.loadAsync(data); const map = new Map(); + console.log(options); for (const [key, value] of Object.entries(zipContent.files)) { const json = toJson(await value.async("text")); + if (key === "word/document.xml") { + console.log(json); + replacer(json, options); + } + map.set(key, json); } diff --git a/src/templater/replacer.ts b/src/templater/replacer.ts new file mode 100644 index 0000000000..830c0a5054 --- /dev/null +++ b/src/templater/replacer.ts @@ -0,0 +1,15 @@ +import { Paragraph, TextRun } from "@file/paragraph"; +import { ElementCompact } from "xml-js"; +import { PatchDocumentOptions } from "./from-docx"; + +export const replacer = (json: ElementCompact, options: PatchDocumentOptions): ElementCompact => { + for (const child of options.children) { + if (child instanceof Paragraph) { + console.log("is para"); + } else if (child instanceof TextRun) { + console.log("is text"); + } + } + + return json; +};