TCPDF生成PDF时HTML内嵌Base64编码图片不显示问题咨询
问题原因
你当前遇到的两种写法失效分别对应两个不同的底层逻辑:
@前缀的写法仅适用于直接调用TCPDF的Image()方法时传参,放到HTML的img标签src属性中无法被writeHTML方法识别,自然两端都无法渲染- 标准data URI格式的base64图片在浏览器正常但PDF不显示,是TCPDF默认配置关闭了本地资源加载、或者权限校验不通过导致的
可行解决方案
方法1:调整配置兼容HTML内嵌base64图片(最符合你现有代码逻辑)
直接保留浏览器可用的base64写法,修改PDF生成代码的两处配置即可:
- 初始化TCPDF后新增允许本地资源加载的配置,同时开启HTML标签调用权限:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // 新增以下两行配置 $pdf->setAllowLocalFiles(true); define('K_TCPDF_CALLS_IN_HTML', true);
- 生成base64字符串时去掉多余空白字符,避免解析失败:
$image = trim(base64_encode(file_get_contents($imageLocation))); $response .= "<img src='data:image/$ext;base64,$image'>";
方法2:直接调用Image方法插入(兼容性最高,不会受HTML解析逻辑影响)
如果修改配置后仍然不生效,可以直接把图片路径传给TCPDF的原生图片插入方法,不需要转base64,性能也更高:
// 新增页面后先写入其他HTML内容 $pdf->writeHTML($response_without_image, true, false, true, false, ''); // 手动指定坐标插入图片,坐标和尺寸可根据实际排版调整 $pdf->Image($imageLocation, 15, 50, 100, 0, $ext);
排查建议
如果修改后仍然不显示,先做两个基础校验:
- 输出
$imageLocation的值,确认是PHP可读取的绝对路径,WordPress环境下建议用get_attached_file()等官方方法获取附件的本地绝对路径,避免相对路径读取失败 - 输出
$image的值,确认base64字符串非空,file_get_contents没有因为权限问题返回false
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

