如何创建包含“docxtemplater”生成的多个 docx 文件的 zip 文件?

Pha*_*623 5 javascript docxtemplater

最近,我被要求制作一个工具,一旦我们向它提供数据,它就会使用给定的模板自动生成 .docx 文件。经过一番思考,我最终选择了 docxtemplater 并且我确实生成了一个 .docx 文件,其核心代码如下:

var zip = new PizZip(content); //Using PizZip.js
var doc = new window.docxtemplater(zip);    
var out = doc.getZip().generate({
    type: "blob",
    mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
saveAs(out, "output.docx"); //Using FileSaver.js
Run Code Online (Sandbox Code Playgroud)

但是,这还不够,我想创建多个 .docx 文件并将它们放入包含 zip 文件的文件中。那么如何修改上面的代码,以便生成一个包含上述“output.docx”文件和另一个 docx 文件的 .zip 文件?

edi*_*999 4

您可以创建多个 docx 并将它们添加到 zip 文件中:

在这里,我的示例适用于两个 doc1 和 doc2,但它可以以相同的方式处理任意数量的文档。

const doc1 = new Docxtemplater(new JSZip(content1));
const doc2 = new Docxtemplater(new JSZip(content2));
const outputZip = new PizZip();

doc1.setData({a:1}).render();
const buffer1 = doc1.getZip().generate({
    type: "arraybuffer",
    compression: "DEFLATE",
    mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
outputZip.file("output1.docx", buffer1);

doc2.setData({b:2}).render();
const buffer2 = doc2.getZip().generate({
    type: "arraybuffer",
    compression: "DEFLATE",
    mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
outputZip.file("output2.docx", buffer2);

const outputBlob = outputZip.generate({
    type: "blob",
    compression: "DEFLATE",
    mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
Run Code Online (Sandbox Code Playgroud)