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

