使用spiritix/php-chrome-html2pdf生成的PDF无法在Chrome打开是什么原因?
问题根因定位
这个问题属于老旧版本Chromium的内置PDF生成模块bug,既不是依赖库问题也不是系统层面问题,和CentOS7自带的Chromium版本过低直接相关。
差异表现原因
不同客户端打开表现不一致的原因是PDF解析器的容错能力不同:
- 火狐浏览器、Mac系统的预览应用、高版本Chrome的PDF解析器对非标准结构的PDF容错性更高,能正常解析老旧Chromium生成的不规范PDF
- 低版本Chrome、Windows端部分PDF阅读器对PDF格式合规性要求更高,遇到未标记的非法内容块就会抛出你遇到的报错,甚至无法打开文件
触发条件
你的代码中开启了displayHeaderFooter参数,CentOS7官方源中最高支持的Chromium v90及更早版本,在开启页眉页脚参数生成PDF时,会错误写入不符合PDF/UA规范的未标记内容块,直接触发该报错。
修复方案
- 升级Chromium/Chrome到105及以上版本。CentOS7可以手动安装Chrome官方提供的Linux稳定版,升级后无需修改现有代码即可生成符合规范的PDF文件
- 若暂时无法升级Chromium,可先关闭
displayHeaderFooter参数验证。如果必须保留页眉页脚,可将页眉页脚内容改为写在HTML的position: fixed固定定位元素中,替代Chromium自带的页眉页脚生成能力 - 若仅面向火狐、Mac端用户使用,也可忽略该报错,不影响目标用户的正常查看
内容的提问来源于stack exchange,提问作者Nand
相关产品推荐
相关产品推荐

