Laravel中使用wkhtmltopdf生成PDF时如何显示页码?
Laravel + wkhtmltopdf 实现PDF页码的可行方案
先解决「signal 11」错误
这个错误大多是wkhtmltopdf渲染页眉/页脚时的内存溢出或兼容性问题,先做这两步排查:
- 降级到wkhtmltopdf 0.12.6 稳定版,新版本渲染引擎易出现此类信号错误;
- 简化页眉/页脚的HTML结构,去掉复杂嵌套、远程资源或未内联的外部CSS。
实现页码的具体步骤
1. 创建独立的页脚(或页眉)视图
在resources/views/pdf/下新建footer.blade.php,用wkhtmltopdf原生支持的占位类实现页码:
<style> .footer { font-size: 12px; text-align: center; padding: 10px 0; border-top: 1px solid #eee; } </style> <div class="footer"> 第<span class="page"></span>页 / 共<span class="topage"></span>页 </div>
注:wkhtmltopdf会自动识别
.page和.topage类,替换为当前页码和总页数,无需额外JS。
2. 在Laravel中配置wkhtmltopdf参数
如果使用barryvdh/laravel-snappy(Laravel常用的wkhtmltopdf封装包),代码示例如下:
use Barryvdh\Snappy\Facades\SnappyPdf; // 加载PDF内容视图 $pdf = SnappyPdf::loadView('pdf.main_content', $your_data); // 设置页脚HTML的绝对路径(必须用绝对路径,否则wkhtmltopdf找不到文件) $pdf->setOption('footer-html', resource_path('views/pdf/footer.blade.php')); // 可选:设置页脚与内容的间距(单位:毫米) $pdf->setOption('footer-spacing', 8); // 启用JS(部分环境下需开启才能正常渲染占位符) $pdf->setOption('enable-javascript', true); // 导出PDF return $pdf->download('document.pdf');
如果直接调用命令行执行wkhtmltopdf,命令示例:
wkhtmltopdf --footer-html /your-project-path/resources/views/pdf/footer.blade.php --enable-javascript input.html output.pdf
3. 关键注意事项
- 必须使用绝对路径指定页眉/页脚文件,相对路径会导致wkhtmltopdf加载失败;
- 页眉/页脚中尽量内联CSS,避免引用外部样式文件;
- 不要在页眉/页脚中使用复杂的JS逻辑或远程图片,减少渲染压力。
内容的提问来源于stack exchange,提问作者Rinor Dalipi
相关产品推荐
相关产品推荐

