
本文详解 DomPDF v2.0.3 中图片无法显示的常见原因及解决方案,重点介绍使用 $_SERVER['DOCUMENT_ROOT'] 构建绝对路径的可靠方法,并提供可直接运行的修复代码与关键配置说明。
本文详解 dompdf v2.0.3 中图片无法显示的常见原因及解决方案,重点介绍使用 `$_server['document_root']` 构建绝对路径的可靠方法,并提供可直接运行的修复代码与关键配置说明。
在使用 DomPDF(尤其是 v2.0.3)生成 PDF 时,图片(如 PNG)无法正常渲染是高频问题。根本原因在于:DomPDF 默认以服务器文件系统路径解析 ,而非 Web URL;当使用相对路径(如 "pic/cvsu.png")或 HTTP 地址(如 "http://localhost/...")时,DomPDF 无法定位或安全加载资源——前者因工作目录不明确而失败,后者则需显式启用远程资源且存在跨域与证书风险。
✅ 正确做法是:使用服务器绝对文件路径,确保 DomPDF 直接读取本地磁盘文件。最稳定、兼容性最佳的方式是结合 $_SERVER['DOCUMENT_ROOT'] 动态拼接:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
// ✅ 关键修复:使用 DOCUMENT_ROOT 构造绝对路径
$logoPath = $_SERVER['DOCUMENT_ROOT'] . '/pic/cvsu.png';
$html = <<<HTML
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>Sample PDF with Text and Image</h1>
<p>This is a sample PDF generated using dompdf with PHP.</p>
<img src="$logoPath" alt="CVSU Logo" style="max-width:90%">
</body>
</html>
HTML;
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream("sample_pdf.pdf", ["Attachment" => false]);
?>⚠️ 注意事项:
- 确保图片真实存在于该绝对路径下(例如 XAMPP 默认为 C:\xampp\htdocs\pic\cvsu.png),并具有 Web 服务器读取权限;
- 不要依赖 base_url() 或 $_SERVER['HTTP_HOST'] 等 Web 地址,DomPDF 渲染阶段不发起 HTTP 请求;
- 若仍报错,请检查错误日志(启用 error_reporting(E_ALL); ini_set('display_errors', 1);),常见错误如 file not found 或 Permission denied;
- 避免使用 file:// 协议前缀(如 file:///C:/...),DomPDF v2+ 已弃用该方式;
- 如需支持远程图片,必须显式启用并配置选项(不推荐用于生产):
$options = new \Dompdf\Options(); $options->set('isRemoteEnabled', true); $dompdf = new Dompdf($options);
总结:在 DomPDF 中嵌入本地图片,核心原则是「路径即文件系统路径」。$_SERVER['DOCUMENT_ROOT'] 提供了跨环境稳定的根目录基准,是解决图片加载失败最简洁、最可靠的方案。


















