You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中使用Browsershot生成PDF遇Navigation timeout错误求助

问题排查与解决方案

针对你在Laravel 8中使用Browsershot(基于Puppeteer)生成PDF时遇到的超时及跳转问题,可按以下步骤排查解决:

1. 调整超时设置与文件存储路径

超时错误的核心原因是页面渲染或资源加载耗时超过默认30秒,同时跳转失败大概率是文件存储路径不在公开可访问目录导致。

修正后的代码示例:

$content = view('index')->render(); // 视图路径无需开头的/

Browsershot::html($content)
    ->setNodeBinary('/usr/bin/node')
    ->setNpmBinary('/usr/bin/npm')
    ->setNodeModulePath(base_path('node_modules/'))
    ->format('A3')
    ->timeout(60000) // 延长超时至60秒
    ->savePdf(public_path('sample.pdf')); // 将PDF保存到public目录(web可访问)

return redirect()->asset('sample.pdf'); // 使用asset生成正确的公开访问链接

2. 优化视图内容加载

如果视图index包含外部资源(远程图片、第三方API请求、字体文件等),会大幅增加渲染耗时,可尝试:

  • 禁用外部资源加载(用于测试是否是资源导致的超时):
    ->setOption('args', ['--disable-images'])
    
  • 等待网络空闲后再生成PDF:
    ->waitForNetworkIdle()
    
  • 将外部资源替换为本地资源,减少加载等待时间。

3. 验证Node与Puppeteer环境

  • 检查Node版本是否符合要求(建议14及以上):
    node -v
    
  • 确认Puppeteer已正确安装:
    npm ls puppeteer
    
    未安装则执行:
    npm install puppeteer
    
  • Linux服务器需安装Puppeteer依赖的系统库:
    sudo apt-get install -y libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libgconf-2-4 libasound2 libatk1.0-0 libgtk-3-0
    

4. 排查跳转报错问题

  • 确认public/sample.pdf文件存在且权限正确,可执行:
    chmod 644 public/sample.pdf
    
  • 改用直接下载方式测试文件是否正常:
    return response()->download(public_path('sample.pdf'));
    

内容的提问来源于stack exchange,提问作者Isha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:48:46