TCPDF从HTML生成PDF报错:无法获取assets/logo.png图片尺寸
问题原因与修复方案
1. continue 语法警告
原因
你使用的TCPDF版本过旧,和PHP 7.3+版本语义不兼容。在PHP7.3及以上版本中,switch 结构内的continue语句默认作用于switch本身,效果等价于break,和老版本TCPDF原本预期的跳出外层循环的逻辑不符,因此触发警告。
修复方案
- 优先升级到官方最新版TCPDF,该兼容问题已经被官方修复
- 若需保留当前TCPDF版本,直接找到报错的
tcpdf.php文件第17778行,将该行的continue修改为continue 2即可
2. chr() 参数类型警告
原因
同样是旧版TCPDF和高版本PHP的兼容问题,旧版字体处理逻辑中没有严格限制传入chr()函数的参数类型,高版本PHP对参数类型校验更严格,因此触发警告。
修复方案
- 升级到最新版TCPDF即可解决
- 若不升级,找到
tcpdf_fonts.php第1671行,给传入chr()的参数外层增加intval()强制转为整数类型即可
3. 图片无法读取致命错误
原因
你传递给TCPDF的HTML内容中,图片使用的是相对路径assets/logo.png。TCPDF运行在服务端ajax/createPDF.php脚本的路径下,会按照服务端本地的相对路径规则查找文件,和前端网页的相对路径规则不匹配,因此无法定位到图片文件。
修复方案二选一即可:
- 将图片路径修改为服务端可识别的绝对路径,可使用站点完整访问URL,或者服务器本地的绝对文件路径(如
/volume1/web/assets/logo.png) - 前端将图片转为base64编码直接嵌入HTML中,TCPDF可直接解析内嵌的base64资源,无需单独读取文件
额外优化建议
前端传输HTML内容时,先通过encodeURIComponent()对HTML字符串编码,服务端接收后用urldecode()解码后再传入TCPDF,可避免特殊字符被转义丢失导致的渲染异常。
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

