word模板.docx:文本变量用{name},图片变量用{%image}
替换效果图:
代码出如下
const JSZip = require('pizzip');
const Docxtemplater = require('docxtemplater');
const fs = require('fs')
const ImageModule = require('docxtemplater-image-module-free');
const path = require('path')
const data = {
name: '林飞',
age: 30,
price:100.00,
address: '华南理工大学',
image:'logo.jpg'
};
// 创建ImageModule实例
const opts = {}
opts.centered= false
opts.fileType='docx'
opts.getImage = (tagValue, tagName) =>{
return fs.readFileSync(path.join(__dirname,'./'+tagValue));
}
opts.getSize = (img, tagValue, tagName) => {
return [100, 40]; // 设置图片大小
}
//读取模板文件
content = fs.readFileSync('./test.docx', 'binary')
const zip = new JSZip(content);
const doc = new Docxtemplater();
doc.attachModule(new ImageModule(opts));
doc.loadZip(zip);
//替换文本和图片
doc.setData(data);
try {
doc.render();
} catch (error) {
const e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties,
};
console.log(JSON.stringify({ error: e }));
throw error;
}
const generatedDoc = doc.getZip().generate({ type: 'nodebuffer' });
//保存文件到本地
fs.writeFileSync('./generated.docx', generatedDoc);