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

Mpdf生成报表时图片无法显示,寻求技术解决方法

解决Mpdf报表图片不显示问题

先修复代码里的直接错误

你当前代码里存在未定义$fullImagePath变量的问题:定义了$imagePath但判断文件存在时用的是未赋值的$fullImagePath,导致逻辑直接走到else分支,这是核心问题之一。先补全变量定义:

$imagePath = 'e-dados/raifatin/' . $row['image_upload'];
// 生成可被file_exists正确识别的绝对路径
$fullImagePath = realpath($imagePath);

适配Mpdf的图片路径规则

Mpdf对本地图片路径的识别有严格要求,以下两种方案二选一:

  • 方案一:直接使用带file://前缀的绝对路径
    Mpdf优先识别带协议前缀的绝对路径,避免工作目录不一致导致的路径错误:
    if ($fullImagePath !== false && file_exists($fullImagePath)) {
        $mpdfImageSrc = 'file://' . $fullImagePath;
        $html .= '<td><img src="' . $mpdfImageSrc . '" style="width: 100px; height: auto;"></td>';
    }
    
  • 方案二:初始化Mpdf时配置base_path
    指定项目根目录作为Mpdf的基础路径,这样相对路径就能被正确解析:
    $mpdf = new \Mpdf\Mpdf([
        'base_path' => __DIR__ // 替换为你的项目根目录绝对路径
    ]);
    

额外排查项

  • 检查Web服务器进程(如www-data、apache)是否有e-dados/raifatin/目录及图片文件的读取权限,权限不足会导致Mpdf无法加载图片。
  • 确认图片格式为Mpdf支持的类型:JPG、PNG、静态GIF,WebP等格式不被支持,需转换格式。

修正后的完整代码示例

if (!empty($row['image_upload'])) {
    $imagePath = 'e-dados/raifatin/' . $row['image_upload'];
    $fullImagePath = realpath($imagePath);

    if ($fullImagePath !== false && file_exists($fullImagePath)) {
        $mpdfImageSrc = 'file://' . $fullImagePath;
        $html .= '<td><img src="' . $mpdfImageSrc . '" style="width: 100px; height: auto;"></td>';
    } else {
        $html .= '<td>No Image Found at: ' . ($fullImagePath ?? $imagePath) . '</td>';
    }
} else {
    $html .= '<td>No Image Available</td>';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:36