当前位置: 首页 > 后端技术 > Node.js

node.js+Puppeteer(无头浏览器)实现服务端批量生成PDF文件

时间:2023-04-03 21:02:37 Node.js

应用场景:当客户创建一个前后端分离的应用时,前端只用于一些基础的数据展示。如果涉及大量数据或报表生成,建议在服务器端展示。本文主要分享如何在服务端使用ActiveReportsJS。报表导出PDF功能demo下载:https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MTIzMjQwfGMwM2JkNWVhfDE2MjM3MjI5NzF8MjkzODJ8ODgwNzA%3D环境准备:node.jsv14.15.0+Headless无头浏览器操作步骤:添加资源文件配置资源和文件constpuppeteer=require('puppeteer');constfs=require('fs');varstatic=require('node-static');varhttp=require('http');varfile=new(static.Server)(__dirname+'/resources');http.createServer(function(req,res){file.serve(req,res);}).listen(9999);constfonts=[{name:'Montserrat',source:'Montserrat-Regular.ttf'},{name:'Montserrat',source:'Montserrat-Medium.ttf',weight:500}];3.调用浏览器初始化ARJS导出PDF文件(async()=>{constbrowser=awaitpuppeteer.launch({headless:true});constpage=awaitbrowser.newPage();awaitpage.goto(`http://localhost:9999/host.html`);//awaitpage.goto(`${__dirname}/resources/host.html`);constpdfString=awaitpage.evaluate(({reportUrl,fonts})=>newPromise(async(resolve,reject)=>{//awaitGC.ActiveReports.Core.FontStore.registerFonts(fonts);constreport=newGC.ActiveReports.Core.PageReport();awaitreport.load(reportUrl);constdoc=awaitreport.run();constresult=awaitGC.ActiveReports.PdfExport.exportDocument(doc,{fonts:fonts,info:{author:'GrapeCity'}});constreader=newFileReader();reader.readAsBinaryString(result.data);reader.onload=()=>resolve(reader.result);reader.onerror=()=>reject('读取二进制字符串时出错');}),{reportUrl:'SimpleTable.rdlx-json',fonts:fonts});constpdfData=Buffer.from(pdfString,'binary');fs.writeFileSync(`${__dirname}/out115.pdf`,pdfData);console.log('完成');process.exit(0);})();