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

Laravel 8+DomPDF 2.2生成PDF时Base64图片无法显示问题排查

在Laravel 8中使用DomPDF 2.2生成PDF时Base64图片无法显示的问题

我正在尝试使用DomPDF 2.2在Laravel 8中生成PDF,但Base64格式的图片无法被识别;不过直接返回HTML时图片可以正常显示。

HTML中的图片标签写法:

<img style="padding: 0px; margin: 0px;" width="100%" src="data:image/png;base64, ' . $base64 . '" />

生成PDF的代码:

$pdf = app('dompdf.wrapper');

$context = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
        ],
    ]);
$pdf->getDomPDF()->setHttpContext($context);
$pdf->getDomPDF()->set_option("isPhpEnabled", true);
$pdf->getDomPDF()->set_option("isHtml5ParserEnabled", true);
$pdf->getDomPDF()->set_option("isRemoteEnabled", true);
$pdf->getDomPDF()->set_option("isFontSubsettingEnabled", true);
$pdf->getDomPDF()->set_option("enable_html5_parser", true);

ob_start();
$pdf->loadHtml($paginaHTML);
ob_get_clean();

$pdf->setPaper('letter', ($orientacion == 1 ? 'portrait' : 'landscape'));
$pdf->save(public_path('img/' . $pdfName));

问题排查与修复

1. Base64字符串拼接格式错误

你的img标签里,Base64内容前后多了不必要的单引号,同时data:image/png;base64,后面多了空格,导致src属性不符合标准格式。正确写法应直接拼接纯Base64编码内容:

<!-- 错误写法 -->
<img style="padding: 0px; margin: 0px;" width="100%" src="data:image/png;base64, ' . $base64 . '" />

<!-- 修复后写法 -->
<img style="padding: 0px; margin: 0px;" width="100%" src="data:image/png;base64,' . $base64 . '" />

2. 移除不必要的输出缓冲操作

你用ob_start()和ob_get_clean()包裹loadHtml的操作完全多余,甚至可能干扰DomPDF读取HTML内容,直接删除这部分代码,改为直接调用:

// 删掉以下两行
ob_start();
$pdf->loadHtml($paginaHTML);
ob_get_clean();

// 改为
$pdf->loadHtml($paginaHTML);

3. 清理重复的配置项

你重复设置了isHtml5ParserEnabled和enable_html5_parser,二者是同一配置的不同写法,保留其中一个即可:

// 保留其中一行即可,建议保留下面这句
$pdf->getDomPDF()->set_option("isHtml5ParserEnabled", true);

修复后的完整代码示例

$pdf = app('dompdf.wrapper');

$context = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
]);
$pdf->getDomPDF()->setHttpContext($context);
$pdf->getDomPDF()->set_option("isPhpEnabled", true);
$pdf->getDomPDF()->set_option("isHtml5ParserEnabled", true);
$pdf->getDomPDF()->set_option("isRemoteEnabled", true);
$pdf->getDomPDF()->set_option("isFontSubsettingEnabled", true);

$pdf->loadHtml($paginaHTML);
$pdf->setPaper('letter', ($orientacion == 1 ? 'portrait' : 'landscape'));
$pdf->save(public_path('img/' . $pdfName));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:51:11