我在使用 docxtemplater 库创建多个生成 .docx 文档的函数时没有遇到任何问题。
但是,下面我创建了两个“docxtemplater”实例,渲染并生成了这两个文件,然后将它们添加到 Pizzip 实例中。最后,我尝试将此实例保存为 zip 文件。
该函数正在运行,输出是一个包含两个 .docx 文档的 zip 文件。不幸的是,这些文件将无法打开,因为“它们无效”。
import Docxtemplater from "docxtemplater";
import PizZip from "pizzip";
import PizZipUtils from "pizzip/utils";
import { saveAs } from "file-saver";
import expressionParser from "docxtemplater/expressions";
import JSZip from "jszip";
const storage = getStorage();
//New zip instance
const outputZip = new PizZip();
function loadFile(url, callback) {
PizZipUtils.getBinaryContent(url, callback);
}
export const renderRelianceForms = async () => {
try {
await getDownloadURL(ref(storage, "RS1PD.docx")).then((url) => {
loadFile(url, function (error, content) {
if (error) {
throw error;
}
const zip = new PizZip(content);
const doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true, parser: expressionParser });
doc.render({
// date: referral?.creation_date.toDate().toLocaleDateString(),
});
const out = doc.getZip().generate({
type: "arraybuffer",
compression: "DEFLATE",
mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
outputZip.file("Reliance Section 1 - Personal Details.docx", out, { base64: true });
console.log("success", out);
});
});
await getDownloadURL(ref(storage, "RS1MP.docx")).then((url) => {
loadFile(url, function (error, content) {
if (error) {
throw error;
}
const zip = new PizZip(content);
const doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true, parser: expressionParser });
doc.render({
// date: referral?.creation_date.toDate().toLocaleDateString(),
});
const out = doc.getZip().generate({
type: "arraybuffer",
compression: "DEFLATE",
mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
outputZip.file("Reliance Section 1 - Missing Person Form.docx", out, { base64: true });
console.log("success", out);
});
});
//OUTZIP
const output = outputZip.generate({
type: "blob",
compression: "DEFLATE",
mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
console.log(outputZip);
saveAs(output, "Reliance.zip");
} catch (err) {
console.error(err);
}
};
我已经使用了这个问题的答案中的代码,直到我尝试打开新保存的文件为止: 如何创建包含“docxtemplater”生成的多个 docx 文件的 zip 文件?
并且还从下面这个问题进行了研究:我尝试在没有参数的情况下生成().docx和最终输出(.zip文件),甚至包含{base64:true}也无济于事。 如何从 docxtemplater.js 输出 docx 以用于 jszip 中的输入
我已经解决了这个问题。
如果您遵循以下问题的答案并进行链接下面提到的更改,则渲染多个 docx 文件并将它们保存到一个 .zip 文件中的以下情况将起作用:
如何创建包含“docxtemplater”生成的多个 docx 文件的 zip 文件?
在所有实例中以及最终输出 zip 中从 .generate() 中删除“压缩:DEFLATE”选项。
将 JSZip 更改为 Pizzip。