pdfkit-table无法自动分页,后续表格重叠在第一页求助
解决pdfkit-table多表格分页重叠问题
问题核心在于pdfkit-table的doc.table()方法是异步操作(返回Promise),如果不等待前一个表格渲染完成就执行下一个表格的创建,PDFKit无法正确更新当前文档的绘制位置,导致后续表格仍从第一页的原有位置开始绘制,最终出现重叠。
修复方案
在每个doc.table()调用前添加await,确保前一个表格完成渲染(包括自动分页)后,再处理下一个表格:
async createPdf( lastMetars: any[], lastTafs: any[], lastSigmets: any[], facu: any, imagesToRender: any[], ) { const doc = new PDFDocument({ size: 'A4' }); doc.pipe(fs.createWriteStream('output.pdf')); doc.fontSize(25).text('CUB470 2024-07-15 MUHA LEMD', { align: 'center' }); doc.image( '/media/datos/ecna.jpg', 200, 100, { fit: [200, 200], align: 'center', valign: 'center' }, ); doc.moveDown(7); const tableMetars = { title: 'METAR', headers: [''], rows: lastMetars.map((metar) => { return [metar.text]; }), }; // 等待第一个表格渲染完成 await doc.table(tableMetars, { hideHeader: true, }); const tableTafs = { title: 'TAF', headers: [''], rows: lastTafs.map((taf) => { return [taf.text]; }), }; // 等待第二个表格渲染完成 await doc.table(tableTafs, { hideHeader: true, }); const tableSigmets = { title: 'SIGMET', headers: [''], rows: lastSigmets.map((sigmet) => { return [sigmet.text]; }), }; // 等待第三个表格渲染完成 await doc.table(tableSigmets, { hideHeader: true, }); if (facu) { const tableFacu = { title: 'FACU', headers: [''], rows: [[facu.text]], }; // 等待第四个表格渲染完成 await doc.table(tableFacu, { hideHeader: true, }); } doc.end(); }
额外优化提示
- 可以为表格配置
margin选项,控制表格与上下内容的间距,避免内容过于紧凑:await doc.table(tableMetars, { hideHeader: true, margin: { top: 10, bottom: 15 } }); - pdfkit-table默认支持单表格内内容自动分页,只要确保等待表格渲染的Promise完成,就能保证分页逻辑正常执行。
内容的提问来源于stack exchange,提问作者Lazaro Falcon
相关产品推荐
相关产品推荐

