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

Spatie/PDF页眉图片显示异常及服务器卡顿问题求助

解决Spatie/PDF页眉图片显示问题

先分析你之前的错误

  • 第一个写法无效:public_path('images/logo.png')返回的是服务器本地文件路径,不是base64编码的图片内容,所以img标签无法识别。
  • 第二个写法导致卡顿:在Blade模板中直接调用file_get_contents会在渲染时同步读取文件,若图片体积大或请求并发高,会占用大量服务器资源,引发无响应。

可行解决方案

方案1:预生成Base64字符串(推荐)

在控制器中提前处理图片的base64编码,再传递到视图,避免模板中执行IO操作:

// 控制器代码
$logoBase64 = base64_encode(file_get_contents(public_path('images/logo.png')));
return PDF::loadView('pdf.your-template', ['logoBase64' => $logoBase64])->stream();

模板中直接使用变量:

<img src="data:image/png;base64, {{ $logoBase64 }}" style="width: 150px; height: 150px;">

方案2:使用公开URL加载图片

如果你的应用有可访问的域名,直接用asset()生成图片的公开URL,同时确保PDF引擎允许加载远程资源:

<!-- 模板代码 -->
<img src="{{ asset('images/logo.png') }}" style="width: 150px; height: 150px;">

修改配置文件config/pdf.php,开启远程资源支持(以dompdf引擎为例):

'dompdf' => [
    'options' => [
        'isRemoteEnabled' => true,
    ],
],

方案3:针对页眉的特殊处理

如果是用setHeaderHtml()设置页眉,需单独为页眉视图传递base64变量:

// 控制器代码
$logoBase64 = base64_encode(file_get_contents(public_path('images/logo.png')));
$headerHtml = view('pdf.header', ['logoBase64' => $logoBase64])->render();

return PDF::loadView('pdf.your-template')
    ->setHeaderHtml($headerHtml)
    ->stream();

页眉视图中使用变量:

<img src="data:image/png;base64, {{ $logoBase64 }}" style="width: 150px; height: 150px;">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:35:06