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

如何在Laravel 5.5 laravel-snappy生成的PDF中添加签名?

给Laravel Snappy生成的PDF添加签名的几种方案

我之前也折腾过这个需求,给你分享几个亲测可行的方案,都是在Laravel 5.5 + laravel-snappy环境下能用的:

方案1:直接在HTML视图中插入签名图片(最简单)

这个方法最直观,因为laravel-snappy本质是把HTML渲染成PDF,所以直接把签名图片放到你的Blade视图里就行:

  • 先准备好签名图片(建议用透明背景的PNG格式,这样不会遮挡内容),放到Laravel项目的public/signatures/目录下
  • 在生成PDF的Blade模板里,用<img>标签引入,注意要用服务器绝对路径,不然wkhtmltopdf可能找不到图片:
<!-- 在你的PDF视图文件中 -->
<div style="margin-top: 50px; text-align: right;">
    <p>签名:</p>
    <img src="{{ public_path('signatures/my-signature.png') }}" style="width: 160px; height: auto;">
</div>
  • 然后正常调用snappy生成PDF就行,图片会被正确渲染到PDF里。

方案2:用wkhtmltopdf水印参数批量添加签名

如果需要给大量PDF统一添加签名,或者想灵活调整签名的位置/透明度,可以用wkhtmltopdf的水印参数,laravel-snappy支持直接传递这些参数:

  • 同样先准备好签名图片,比如路径是public/signatures/signature.png
  • 在生成PDF的代码里,添加对应的选项:
use Barryvdh\Snappy\Facades\PDF;

// 加载视图并设置参数
$pdf = PDF::loadView('pdf.invoice', $invoiceData)
    // 指定签名图片路径
    ->setOption('watermark-image', public_path('signatures/signature.png'))
    // 设置透明度(0-1,1是完全不透明)
    ->setOption('watermark-opacity', 0.9)
    // 设置X轴位置(可以是百分比或像素值)
    ->setOption('watermark-x-pos', '80%')
    // 设置Y轴位置
    ->setOption('watermark-y-pos', '90%')
    // 设置签名宽度(高度会自动按比例缩放)
    ->setOption('watermark-width', '150');

return $pdf->download('signed-invoice.pdf');

这个方法的好处是不用修改视图,直接在代码里控制签名的位置和样式,适合批量处理场景。

方案3:添加数字签名(加密证书验证)

如果需要的是具有法律效力的数字签名(不是图片,而是用数字证书加密的签名),那wkhtmltopdf本身不支持,需要在生成PDF后用第三方工具处理:

  1. 先用laravel-snappy生成普通PDF,保存到服务器临时目录:
$tempPdfPath = storage_path('temp/unsigned.pdf');
PDF::loadView('pdf.contract', $data)->save($tempPdfPath);
  1. 服务器上安装pdftk或者qpdf这类PDF处理工具(以pdftk为例),然后准备好数字证书和对应的FDF签名表单文件
  2. 在Laravel里调用shell命令执行签名:
$signedPdfPath = storage_path('temp/signed.pdf');
// 执行pdftk命令完成签名
exec("pdftk {$tempPdfPath} fill_form signature.fdf output {$signedPdfPath} flatten");

// 返回签名后的PDF给用户
return response()->download($signedPdfPath)->deleteFileAfterSend(true);

这个方法需要额外配置服务器环境,还要准备数字证书,适合对安全性要求高的场景。

注意事项

  • 图片签名建议用高分辨率的PNG,避免在PDF中显示模糊
  • 用水印参数时,要确认你的wkhtmltopdf版本是0.12.x及以上,低版本可能不支持这些选项
  • 数字签名方案需要服务器允许执行shell命令,并且安装对应的PDF处理工具

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:38:42