Laravel中使用mPDF生成含图片PDF时视图加载图片报错
Laravel中mPDF生成PDF时图片加载报错的解决方案
问题根源
mPDF无法直接识别Web相对路径(如/frontend/assets/images/cv/xxx.jpg),必须提供服务器可访问的绝对路径、Base64编码内容或完整URL才能正常加载图片。
方案1:使用服务器绝对路径并开启本地文件访问
- 控制器中给mPDF添加本地文件访问权限:
$mpdf= new \Mpdf\Mpdf([ 'mode'=>'UTF-8', 'format' => [400, 400], 'autoScriptToLang'=>true, 'autoLangToFont'=>true ]); // 允许加载本地服务器文件 $mpdf->allow_local_file_access = true; $mpdf->WriteHTML(view('frontend.create-cv.pdf',compact('data')));
- 修改Blade视图的图片路径为服务器绝对路径:
<img src="{{ public_path('frontend/assets/images/cv/' . $data['seeker']->image) }}">
方案2:将图片转为Base64编码嵌入HTML
直接把图片内容编码为Base64,彻底避免路径依赖,修改Blade视图:
@php $imagePath = public_path('frontend/assets/images/cv/' . $data['seeker']->image); // 先检查文件是否存在,避免报错 if (file_exists($imagePath)) { $imageType = pathinfo($imagePath, PATHINFO_EXTENSION); $imageData = base64_encode(file_get_contents($imagePath)); $base64Image = "data:image/{$imageType};base64,{$imageData}"; } else { // 图片不存在时的兜底处理 $base64Image = ''; } @endphp <img src="{{ $base64Image }}" alt="用户头像">
方案3:配置mPDF的BaseURL并使用完整URL
- 实例化mPDF时设置BaseURL为项目根地址:
$mpdf= new \Mpdf\Mpdf([ 'mode'=>'UTF-8', 'format' => [400, 400], 'autoScriptToLang'=>true, 'autoLangToFont'=>true, 'baseURL' => url('/') ]); $mpdf->WriteHTML(view('frontend.create-cv.pdf',compact('data')));
- Blade视图中使用完整URL加载图片:
<img src="{{ url('frontend/assets/images/cv/' . $data['seeker']->image) }}">
额外检查项:
- 确认
public/frontend/assets/images/cv/目录下存在对应图片文件 - 确保图片文件设置了可读权限(如
chmod 644)
内容的提问来源于stack exchange,提问作者Elvin Məmmədov
相关产品推荐
相关产品推荐

