如何调整Puppeteer的Page.pdf超时,解决Page.printToPDF超时报错问题
错误原因
你遇到的TimeoutError: waiting for Page.printToPDF failed报错,是因为Puppeteer的page.pdf()方法默认超时阈值为30000毫秒(30秒),大型发票页面内容多、渲染排版耗时超过默认值就会触发该错误。
调整超时时长方案
在调用page.pdf()方法的配置项中新增timeout参数即可自定义超时时长,参数单位为毫秒:
- 示例:设置超时时长为2分钟(适配多数大型发票场景)
await page.pdf({ path: 'invoice.pdf', format: 'A4', // 保留你原有的其他PDF配置项,比如边距、页眉页脚等 timeout: 120000 // 自定义超时时间,单位为毫秒,120000即2分钟 });
- 若发票体量极大,可直接设置
timeout: 0,代表完全取消超时限制,等待生成完成再返回结果:
await page.pdf({ path: 'invoice.pdf', format: 'A4', // 其他原有配置 timeout: 0 });
可选优化方案
如果调整超时后生成效率仍然偏低,可以搭配以下操作优化:
- 调用
page.goto()加载发票页面时添加waitUntil: 'networkidle0'配置,确保所有页面资源(图片、样式等)加载完成后再生成PDF,避免边加载边生成拉长耗时 - 优化发票页面的资源体积,比如压缩内嵌的高清签章、商品图片,移除页面中无用的前端脚本和冗余样式
- 超百页的超大型发票可以拆分成分批次生成多个PDF后再合并,降低单次渲染的资源压力
内容的提问来源于stack exchange,提问作者Julien Lamarche
相关产品推荐
相关产品推荐

