CodeIgniter中使用TCPDF导出HTML页面为PDF显示异常如何解决
问题修复方案
导致PDF显示异常的核心原因是TCPDF对现代HTML/CSS的支持能力有限,再加上代码存在数据传递疏漏,可按以下步骤修复:
- 补全视图数据传递
你在pdfreport视图中加载printconsignment视图时,没有将控制器传入的$data参数传递进去,导致printconsignment视图无法获取查询到的result数据,首先将加载视图的代码修改为:
$this->view('printconsignment', $data);
- 全量使用内联CSS样式
TCPDF对外部样式表、<style>标签的支持度极低,所有样式必须写在元素的style属性内。比如表格要固定宽度、合并边框,单元格要设置边框、内边距,全部直接写到对应标签的style属性中,不要使用class引用外部样式。 - 所有资源使用绝对路径
printconsignment视图中的图片、字体等资源,不要使用相对路径,必须填写完整的绝对URL或者服务器物理路径,避免TCPDF无法加载资源导致显示异常。 - 调整TCPDF配置适配宽页面
如果你的原页面内容宽度较大,将TCPDF实例化的第一个参数从'P'(竖版)改为'L'(横版),避免内容因为宽度不足被挤压变形:
$obj_pdf = new TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
同时建议将setFontSubsetting参数改为true,减少字体加载异常的概率。
- 简化HTML布局结构
不要使用浮动、Flex、Grid等现代CSS布局,所有排版全部使用表格实现,TCPDF对表格的兼容性最好,能最大程度还原你要的排版效果。 - 调试原始HTML内容
你可以在获取$content之后临时加一行输出代码,确认原始HTML内容本身没有数据缺失、结构错误:
$content = ob_get_contents(); // 临时加这行调试,确认HTML正常后再删除 echo $content;exit; ob_end_clean();
如果调整后还是达不到预期效果,可以替换为dompdf库生成PDF,dompdf对CSS的支持度远高于TCPDF,适配成本更低。
内容的提问来源于stack exchange,提问作者dingu da
相关产品推荐
相关产品推荐

