正文
nodejs根据word模板生成文档(方法二)
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
【推荐该方法,模板比较简洁】
1,代码,
这里采用的模块为
docxtemplater 和 open-docxtemplater-image-module,均为开源(docxtemplater 有收费的image模块)
const fs = require('fs')
const JSZip = require('jszip')
const Docxtemplater = require('docxtemplater')
const ImageModule = require('open-docxtemplater-image-module')
//读取模板文件
var content = fs.readFileSync(path.join(__dirname, '../data/template/doc.docx'), 'binary');
var zip = new JSZip(content);
var doc = new Docxtemplater();
var opts = {
centered: false,
getImage: function(tagValue, tagName) {
console.log(__dirname);
return fs.readFileSync(path.join(__dirname, '../data/' + tagValue));
},
getSize: function(img, tagValue, tagName) {
return [150, 150];
}
}
doc.attachModule(new ImageModule(opts))
doc.loadZip(zip);
doc.setData({
name1: "内容已被替换1",
name2: "内容已被替换2",
value1: "新的值1",
value2: "新的值2",
image: "image1.png"
}); try {
/*
render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
*/
doc.render();
} catch (error) {
var err = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties,
}
console.log(JSON.stringify(err));
/*
The error thrown here contains additional information when logged with JSON.stringify (it contains a property object).
*/
throw error;
} var buf = doc.getZip().generate({ type: 'nodebuffer' });
/* buf is a nodejs buffer, you can either write it to a file or do anything else with it.*/
fs.writeFileSync(path.join(__dirname, '../data/out/doc.docx'), buf);
2,模板格式
其中,模板文件格式为:
//文本替换模板
{name1}--------------{value1}
{name2}--------------{value2} //图片替换模板
{%image}
数据结构