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

TCPDF生成PDF时HTML内嵌Base64编码图片不显示问题咨询

问题原因

你当前遇到的两种写法失效分别对应两个不同的底层逻辑:

  1. @前缀的写法仅适用于直接调用TCPDF的Image()方法时传参,放到HTML的img标签src属性中无法被writeHTML方法识别,自然两端都无法渲染
  2. 标准data URI格式的base64图片在浏览器正常但PDF不显示,是TCPDF默认配置关闭了本地资源加载、或者权限校验不通过导致的

可行解决方案

方法1:调整配置兼容HTML内嵌base64图片(最符合你现有代码逻辑)

直接保留浏览器可用的base64写法,修改PDF生成代码的两处配置即可:

  1. 初始化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);
  1. 生成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:36:04