nodejs生成docx模板文档

686 阅读1分钟
npm安装
jszip
docxtemplater
docxtemplater-image-module-free
我用的版本
"devDependencies": {
    "docxtemplater": "^3.29.0",
    "docxtemplater-image-module-free": "^1.1.1",
    "jszip": "^2.0.0"
}
var fs = require('fs');
var path = require('path');
var jszip = require('jszip');
var docxtemplater = require('docxtemplater'); // https://www.npmjs.com/package/docxtemplater
var docximagetemplater = require('docxtemplater-image-module-free');
// 版本报错查看 https://gitee.com/xiuerjava/docxtemplater/blob/master/CHANGELOG.md
let content = fs.readFileSync(path.resolve(__dirname, './data/module/111.docx'), 'binary'); //模板
let zip = new jszip(content);
let opts = {
  contered:false,
  fileType:'docx',
  getImage:function(tagValue,tagName) { // 获取图片的
    return fs.readFileSync(path.join(__dirname,'./img/'+tagValue))
  },
  getSize:function(img,tagValue,tagName) { // 设置图片大小
    return [400,400]
  }
}

let doc = new docxtemplater(zip,{
  modules:[new docximagetemplater(opts)]
});
doc.setData({
  name: '嘻嘻嘻',
  phone: '1312321214',
  description: '大萨达哇多哇所多无多多',
  img:'1.png'
});
doc.render();

// 保存文件
let buf = doc.getZip().generate({ type: 'nodebuffer' });
fs.writeFileSync(path.resolve(__dirname, './data/测试.docx'), buf);

// 模板文档 说明
// 文字可以直接写 {name} {phone}
// 带图片的写 {%img}
// html模块 {~html}