这两天接到一个需求,需要批量生成wrod合同,合同中需要填充不同的信息,姓名,身份证号码,家庭住址,如果信息量比较少,手动填充比较快,但是合同有几百份,上面的信息不同,所以我们需要开发一个批量工具。
经过筛选最终决定使用docxtemplater这个库,这个库如何使用呢,看代码:
// 引入相关的库
var PizZip = require('pizzip');
var Docxtemplater = require('docxtemplater');
var fs = require('fs');
var path = require('path');
// 读取文件,以二进制文件形式保存
var content = fs.readFileSync(path.resolve(__dirname, 'simple.docx'), 'binary');
// 压缩数据
var zip = new PizZip(content);
// 生成模板文档
var doc =new Docxtemplater(zip);
// 设置填充数据
doc.setData({
first_name: 'John',
last_name: 'Doe',
phone: '0652455478',
description: 'New Website'
});
//渲染数据生成文档
doc.render()
// 将文档转换文nodejs能使用的buf
var buf = doc.getZip().generate({ type: 'nodebuffer' });
// 输出文件
fs.writeFileSync(path.resolve(__dirname, 'output.docx'), buf);
阅读源码,发现使用docxtemplater需要如下几个步骤:
1、引入相关的库
2、以二进制的形式读取word文档
3、将二进制信息进行压缩
4、调用Docxtemplater函数传入压缩数据生成模板文档doc
5、调用文档的setData函数填充数据
6、文档调用render函数生成word
7、调用doc文档的相关函数生成nodejs可以操作的buffer文件
8、将buffer数据输出到目标文件。
这个操作是在nodejs端完成的,还有另外一个版本,可以在浏览器端完成,下篇文章再来讨论,上面的代码除了用到了docxtemplate还用到了pizzip库,这个库的作用是将二进制数据转化为zip压缩格式数据的一个库,再用Docxtemplate函数生成文档时需要传入zip压缩格式的数据,这里需要格外注意,官网文档也是这样做的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。