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

使用DOMPDF生成PDF时本地图片无法加载的问题排查

解决DOMPDF加载本地图片“Image not found or type unknown”问题

针对你遇到的问题,给你几个可行的解决方案:

方法1:使用绝对文件系统路径

DOMPDF对相对路径的解析逻辑和网页不同,直接用PHP的__DIR__常量获取当前脚本的绝对目录,拼接图片路径即可:

<?php 
require_once 'packages/dompdf/autoload.inc.php'; 
use Dompdf\Dompdf;

$dompdf = new Dompdf();
// 用__DIR__拼接绝对路径
$imagePath = __DIR__ . '/photo.jpeg';
$dompdf->loadHtml("<img src='$imagePath'>");

$dompdf->setPaper('A4', 'portrait'); 
$dompdf->render(); 
$dompdf->stream("test-pdf", array("Attachment" => 0));
?>

__DIR__会返回当前index.php所在的物理目录,让DOMPDF能精准定位到图片文件。

方法2:配置DOMPDF的路径限制与远程加载权限

开启isRemoteEnabled并设置chroot指定允许访问的目录,这样相对路径就能被正确解析:

<?php 
require_once 'packages/dompdf/autoload.inc.php'; 
use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->set('isRemoteEnabled', true);
$options->set('chroot', __DIR__); // 限制DOMPDF仅访问当前目录

$dompdf = new Dompdf($options);
$dompdf->loadHtml("<img src='photo.jpeg'>");

$dompdf->setPaper('A4', 'portrait'); 
$dompdf->render(); 
$dompdf->stream("test-pdf", array("Attachment" => 0));
?>

方法3:将图片转为Base64嵌入HTML

把图片内容编码成Base64字符串直接嵌入HTML,完全规避路径问题(适合小体积图片):

<?php 
require_once 'packages/dompdf/autoload.inc.php'; 
use Dompdf\Dompdf;

// 读取图片并转为Base64
$imageBase64 = base64_encode(file_get_contents('photo.jpeg'));
$imageSrc = "data:image/jpeg;base64,$imageBase64";

$dompdf = new Dompdf();
$dompdf->loadHtml("<img src='$imageSrc'>");

$dompdf->setPaper('A4', 'portrait'); 
$dompdf->render(); 
$dompdf->stream("test-pdf", array("Attachment" => 0));
?>

额外检查项

  • 确认图片文件名和扩展名完全正确(比如是否是photo.jpg而非photo.jpeg,注意大小写);
  • 确保PHP进程对图片文件有读取权限(XAMPP环境下默认权限通常没问题);
  • 尽量使用DOMPDF的最新稳定版本,避免旧版本的路径解析bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:15:08