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

Laravel中使用mPDF生成含图片PDF时视图加载图片报错

Laravel中mPDF生成PDF时图片加载报错的解决方案

问题根源

mPDF无法直接识别Web相对路径(如/frontend/assets/images/cv/xxx.jpg),必须提供服务器可访问的绝对路径、Base64编码内容或完整URL才能正常加载图片。


方案1:使用服务器绝对路径并开启本地文件访问

  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')));
  1. 修改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

  1. 实例化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')));
  1. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:24:17