const { PDFNet } = require("@pdftron/pdfnet-node"); type CreateReport = ( coverPage: Buffer, reportTempPath: string, reportDatas: { [key: string]: any; }[] ) => Promise<{ result: boolean; buffer?: ArrayBuffer; error?: any; }>; export const createReport: CreateReport = async ( coverPage, reportTempPath, reportDatas ) => { const main = async () => { await PDFNet.initialize(process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY); const mainDoc = await PDFNet.PDFDoc.create(); const buf = await PDFNet.Convert.office2PDFBuffer(coverPage); const coverPDFDoc = await PDFNet.PDFDoc.createFromBuffer(buf); const options = new PDFNet.Convert.OfficeToPDFOptions(); await mainDoc.insertPages( (await mainDoc.getPageCount()) + 1, coverPDFDoc, 1, await coverPDFDoc.getPageCount(), PDFNet.PDFDoc.InsertFlag.e_none ); for (const reportData of reportDatas) { const resportDataJson = JSON.stringify(reportData); const templateDoc = await PDFNet.Convert.createOfficeTemplateWithPath( "public" + reportTempPath, options ); const pdfdoc = await templateDoc.fillTemplateJson(resportDataJson); await mainDoc.insertPages( (await mainDoc.getPageCount()) + 1, pdfdoc, 1, await pdfdoc.getPageCount(), PDFNet.PDFDoc.InsertFlag.e_none ); } // await mainDoc.save("test1.pdf", PDFNet.SDFDoc.SaveOptions.e_linearized); const buffer = await mainDoc.saveMemoryBuffer( PDFNet.SDFDoc.SaveOptions.e_linearized ); return { result: true, buffer, }; }; const result = await PDFNet.runWithCleanup( main, process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY ) .catch((err: any) => { return { result: false, error: err, }; }) .then(async (data: any) => { return data; }); return result; };