使用FPDF生成合同并集成FPDI插入ToS时遭遇500错误求助
解决FPDF与FPDI结合使用时的500错误问题
嘿,我瞅了下你的代码和遇到的问题,这几个关键小问题导致了服务器500错误,咱们来一步步拆解并修复:
你的代码里的核心问题
- 重复输出PDF导致头冲突:你同时创建了
FPDF和FPDI两个独立的PDF对象,最后还分别调用Output()——服务器没法同时给浏览器返回两个PDF文件,直接就触发错误了。 - 变量名写错了:代码里写了
$pdf->importPage(1),但你根本没定义过$pdf这个变量啊!这里应该用你创建的$tos对象才对。 - 没必要分开用两个工具:FPDI本身就是继承FPDF的,一个FPDI对象就能搞定合同内容编写+ToS页面导入,完全不用分开实例化。
修正后的完整代码
<?php require_once('_inc/fpdf.php'); require_once('_inc/fpdi/fpdi.php'); // 只需要实例化FPDI就行,它自带FPDF的所有功能 $pdf = new FPDI(); // 先添加合同内容的页面 $pdf->AddPage(); // 注意:如果whtml是你自己扩展的FPDF方法,要确保这个扩展已经正确实现哦 $pdf->whtml("blahblah"); // 导入ToS文件并添加到合同后面 $tosFilePath = 'ToS.pdf'; // 获取ToS的总页数,支持多页ToS导入 $totalPages = $pdf->setSourceFile($tosFilePath); // 循环导入每一页ToS for ($pageNum = 1; $pageNum <= $totalPages; $pageNum++) { $pdf->AddPage(); $templateId = $pdf->importPage($pageNum); $pdf->useTemplate($templateId); } // 最后只输出一次,把合同+ToS合并成一个完整PDF $pdf->Output(); ?>
修正说明
- 统一用FPDI对象:FPDI继承了FPDF的所有方法,所以直接用它来写合同内容、导入ToS页面就行,省得搞两个对象打架。
- 修复变量名错误:把原来未定义的
$pdf改成了实际的对象变量,避免调用不存在的对象方法。 - 合并输出:只调用一次
Output(),确保浏览器只收到一个完整的PDF文件,彻底解决头信息冲突的问题。 - 支持多页ToS:加了循环逻辑,不管你的ToS是1页还是N页,都能完整导入到合同后面。
内容的提问来源于stack exchange,提问作者S. Lucas
相关产品推荐
相关产品推荐

