使用Snappy+wkhtmltopdf导出PDF遇exit status code 1错误求助
解决wkhtmltopdf导出PDF时HostNotFoundError问题
错误原因
从报错信息来看,wkhtmltopdf无法解析maxcdn.bootstrapcdn.com域名,导致无法加载Bootstrap和Font Awesome的CDN资源,最终抛出HostNotFoundError并退出。
解决方案
1. 替换CDN资源为本地文件(最稳妥方案)
- 下载对应版本的Bootstrap 3.3.5 CSS和Font Awesome 4.4.0 CSS到项目本地目录,比如
public/css下。 - 修改HTML模板中的资源引用,将CDN链接替换为本地路径:
<!-- 原CDN链接 --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> <!-- 替换为本地路径 --> <link rel="stylesheet" href="/css/bootstrap.min.css"> <link rel="stylesheet" href="/css/font-awesome.min.css"> - 若相对路径无法被wkhtmltopdf识别,可改用绝对文件路径(如
C:\your-project\public\css\bootstrap.min.css)。
2. 检查网络与DNS配置
- 在运行wkhtmltopdf的机器上打开命令提示符,执行:
若无法解析到IP,说明DNS配置异常,可尝试更换DNS服务器(如8.8.8.8)。ping maxcdn.bootstrapcdn.com - 内网环境下,确认防火墙、代理服务器是否允许访问外部CDN域名,必要时联系运维开放权限。
3. 配置wkhtmltopdf代理(如需)
若机器需通过代理访问外网,在Snappy配置的options中添加代理参数:
'pdf' => [ 'enabled' => true, 'binary' => env('WKHTML_PDF_BINARY', '"D:\SETTING\wkhtmltopdf\bin\wkhtmltopdf.exe"'), 'timeout' => false, 'options' => [ 'proxy' => 'http://your-proxy-ip:port', // 替换为实际代理地址 'no-proxy' => 'localhost,127.0.0.1', // 可选,指定无需代理的本地地址 ], 'env' => [], ],
4. 更换CDN源
若maxcdn.bootstrapcdn.com确实无法访问,可替换为其他稳定CDN链接:
- Bootstrap 3.3.5:
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css - Font Awesome 4.4.0:
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css
修改HTML引用后重新测试导出。
5. 直接测试wkhtmltopdf网络能力
在命令行执行测试命令,排除Snappy的影响:
D:\SETTING\wkhtmltopdf\bin\wkhtmltopdf.exe "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" test.pdf
若该命令报错,说明wkhtmltopdf本身网络访问有问题,优先排查网络环境;若能生成PDF,再检查Snappy配置或HTML模板问题。
内容的提问来源于stack exchange,提问作者Giang_GR
相关产品推荐
相关产品推荐

