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
相关产品推荐
相关产品推荐

