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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:44:57