tcpdf生成pdf需按页追加内容:先禁用默认页眉页脚,再逐页addpage()后writehtml();每页须重设字体以防中文乱码;html拼接推荐字符串连接或sprintf,注意css兼容性及资源路径须绝对或base64。

PHP框架中需要将多个PDF内容块(如合同条款、用户信息、签名栏)按逻辑顺序拼接成一份完整PDF文档,而不是简单合并文件或覆盖页面。
用TCPDF逐页追加内容
第一步:实例化TCPDF对象并禁用默认页眉页脚
这一步必须做,否则每页顶部会自动插入TCPDF默认标题,破坏你设计的版式布局。
第二步:调用AddPage()→用writeHTML()写入第一段HTML内容→再调用AddPage()
每次AddPage()都会创建全新空白页,writeHTML()只作用于当前页;不调用AddPage()就直接writeHTML(),内容会叠加在同一页上,极易造成文字重叠或错位。
第三步:设置新字体后,用MultiCell()在第二页底部写入动态生成的用户签名栏
【必须先调用SetFont()再写MultiCell()】,否则中文会显示为方块——TCPDF不会继承上一页的字体设置,每页开头都要重新声明。
用HTML模板字符串拼接再整体渲染
方法一:用PHP原生字符串拼接组装完整HTML
把各部分内容(如header、body、footer)分别存为变量,用.运算符连接,最后一次性传给writeHTML()。适合结构固定、字段少的场景,代码清晰易维护。
方法二:用sprintf()格式化填充HTML骨架
定义含占位符的HTML模板字符串,如'
注意:writeHTML()对CSS支持有限,float、flex、grid几乎无效,表格边框请用border="1"属性而非CSS border,否则导出后可能消失。
在ThinkPHP中注入动态数据并生成PDF
① 在控制器方法里获取用户数据:$data = User::find($id)->toArray();
② 加载HTML模板文件:$html = file_get_contents('template/contract.html');
③ 用str_replace批量替换占位符:$html = str_replace(['{name}', '{phone}'], [$data['name'], $data['phone']], $html);
④ 实例化TCPDF→AddPage()→writeHTML($html, true, false, true, false, '')→Output('contract.pdf', 'I')
这一步操作起来很简单,直接把文件拖进去就行。
⑤ 关键点:模板HTML中所有路径(如img src)必须为绝对路径或base64内联,相对路径在TCPDF中会失效——它不运行浏览器环境,无法解析./images/logo.png这类地址。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











