parent
							
								
									3dc23fd746
								
							
						
					
					
						commit
						97d8d34e12
					
				
				 5 changed files with 93 additions and 27 deletions
			
			
		
									
										Binary file not shown.
									
								
							
						@ -0,0 +1,67 @@ | 
				
			||||
const PizZip = require('pizzip'); | 
				
			||||
const Docxtemplater = require('docxtemplater'); | 
				
			||||
const fs = require('fs'); | 
				
			||||
const path = require('path'); | 
				
			||||
 | 
				
			||||
// The error object contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
 | 
				
			||||
function replaceErrors(key, value) { | 
				
			||||
    if (value instanceof Error) { | 
				
			||||
        return Object.getOwnPropertyNames(value).reduce(function (error, key) { | 
				
			||||
            error[key] = value[key]; | 
				
			||||
            return error; | 
				
			||||
        }, {}); | 
				
			||||
    } | 
				
			||||
    return value; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
function errorHandler(error) { | 
				
			||||
    console.log(JSON.stringify({ | 
				
			||||
        error: error | 
				
			||||
    }, replaceErrors)); | 
				
			||||
 | 
				
			||||
    if (error.properties && error.properties.errors instanceof Array) { | 
				
			||||
        const errorMessages = error.properties.errors.map(function (error) { | 
				
			||||
            return error.properties.explanation; | 
				
			||||
        }).join("\n"); | 
				
			||||
        console.log('errorMessages', errorMessages); | 
				
			||||
        // errorMessages is a humanly readable message looking like this :
 | 
				
			||||
        // 'The tag beginning with "foobar" is unopened'
 | 
				
			||||
    } | 
				
			||||
    throw error; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
module.exports = function (userInfo, fileName) { | 
				
			||||
    return new Promise((resolve, reject) => { | 
				
			||||
        let content = fs.readFileSync(path.resolve(__dirname, `../template/${fileName}`), 'binary'); | 
				
			||||
        let zip = new PizZip(content); | 
				
			||||
        let doc; | 
				
			||||
 | 
				
			||||
        try { | 
				
			||||
            doc = new Docxtemplater(zip); | 
				
			||||
        } catch (error) { | 
				
			||||
            errorHandler(error); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        doc.setData(userInfo); | 
				
			||||
 | 
				
			||||
        try { | 
				
			||||
            doc.render() | 
				
			||||
        } catch (error) { | 
				
			||||
            errorHandler(error); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        let buf = doc.getZip().generate({ | 
				
			||||
            type: 'nodebuffer' | 
				
			||||
        }); | 
				
			||||
        fs.writeFileSync(path.resolve(__dirname, `../public/files/${userInfo.firstName}-${userInfo.lastName}-${fileName}`), buf); | 
				
			||||
        resolve(`http://localhost:3000/users/download/${userInfo.firstName}-${userInfo.lastName}-${fileName}`) | 
				
			||||
 | 
				
			||||
            .catch(err => { | 
				
			||||
                reject({ | 
				
			||||
                    eCode: 500, | 
				
			||||
                    eText: err | 
				
			||||
                }) | 
				
			||||
            }) | 
				
			||||
    }) | 
				
			||||
 | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue