import PizZip from "pizzip"; import Docxtemplater from "docxtemplater"; import fs from "fs"; import path from "path"; export default async (req, res) => { if (req.method === "POST") { // Get the data from the request body const data = req.body; // log stats let ip = req.body.ip; if (ip === undefined) ip = req.headers["x-forwarded-for"] + " on " + req.headers["user-agent"]; let date_time = new Date(); let string = fs.readFileSync("ground_log.txt", "utf8") + "\n" + "[" + date_time + "]" + ip + " : " + data.geo_data + " : " + data.in_city; fs.writeFile("ground_log.txt", string, function (err) { if (err) { return console.error(err); } }); //get wet coefficient let input_docx; if (data.wet_coef == 1.6) { if (data.rod_len == 2) input_docx = "wet_input_15.docx"; else if (data.rod_len == 3) input_docx = "wet_input_3.docx"; } else { if (data.rod_len == 2) input_docx = "dry_input_15.docx"; else if (data.rod_len == 3) input_docx = "dry_input_3.docx"; } // Load the docx file as binary content const content = fs.readFileSync( path.resolve(process.cwd(), input_docx), "binary" ); const zip = new PizZip(content); const doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true, }); try { // Render the document with data console.log(data); doc.render(data); // Generate the document as a buffer const buf = doc.getZip().generate({ type: "nodebuffer", compression: "DEFLATE", }); // Set headers for downloading the file res.setHeader("Content-Disposition", "attachment; filename=opis.docx"); res.setHeader( "Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ); // Send the buffer as a response res.send(buf); } catch (error) { // Handle errors console.error(error); res.status(500).json({ error: error.message }); } } else { // Handle non-POST requests res.setHeader("Allow", ["POST"]); res.status(405).end(`Method ${req.method} Not Allowed`); } };