-
Notifications
You must be signed in to change notification settings - Fork 15
/
json2docx.js
50 lines (40 loc) · 1.37 KB
/
json2docx.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
const JSZip = require('jszip');
const Docxtemplater = require('docxtemplater');
/* eslint-disable-next-line */
const yapi = require('yapi.js');
// const data = require('./api.json')
const fs = require('fs');
const path = require('path');
const parser = require('./parser.js');
// Load the docx file as a binary
function toDocx(data) {
const content = fs
.readFileSync(path.resolve(yapi.WEBROOT_SERVER, '../', 'input.docx'), 'binary');
const zip = new JSZip(content);
const doc = new Docxtemplater();
doc.loadZip(zip);
doc.setOptions({ linebreaks: true, parser });
// set the templateVariables
doc.setData(JSON.parse(data));
try {
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
doc.render();
} catch (error) {
const e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties,
};
console.log(JSON.stringify({ error: e }));
// The error thrown here contains additional information
// when logged with JSON.stringify (it contains a property object).
throw error;
}
const 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.resolve(__dirname, 'output.docx'), buf);
return buf;
}
module.exports = toDocx;