Core PHP中使用FPDF生成PDF模板遇文本重叠问题求助
PDF表格文本换行与行列对齐修复
当前效果:
需求
- 文本禁止重叠,必须实现自动换行
- 适配两种数据场景:
- 日期列内容行数多于响应列(如图所示)
- 响应列内容行数多于日期列
当前代码
$data = $this->getExportData($survey_id, $question_id); $pdf = new PDF(); $pdf->AddPage(); $pdf->SetFont('Arial', 'B', 16); // 添加问卷名称标题 $pdf->Cell(0, 10, $survey_name, 0, 1, 'C'); // 添加结果表格 $pdf->SetFont('Arial', '', 12); $pdf->SetFillColor(242, 242, 242); $pdf->Cell(80, 10, '时间', 1, 0, 'C', true); $pdf->Cell(0, 10, '回复内容', 1, 1, 'C', true); $pdf->SetFont('Arial', '', 10); // 添加数据 foreach ($data as $row) { $pdf->Cell(80, 10, $row['Date'], 1, 0, 'C'); $pdf->WordWrap($text,80); $pdf->Cell(0, 10, $row['Response'], 1, 1, 'L'); $pdf->WordWrap($text,0); } // 输出PDF到浏览器 $pdf->Output();
修复方案
核心用MultiCell替代Cell实现自动换行,同时计算单元格高度保证行列对齐:
$data = $this->getExportData($survey_id, $question_id); $pdf = new PDF(); $pdf->AddPage(); $pdf->SetFont('Arial', 'B', 16); // 添加问卷名称标题 $pdf->Cell(0, 10, $survey_name, 0, 1, 'C'); // 添加结果表格表头 $pdf->SetFont('Arial', '', 12); $pdf->SetFillColor(242, 242, 242); $pdf->Cell(80, 10, '时间', 1, 0, 'C', true); $pdf->Cell(0, 10, '回复内容', 1, 1, 'C', true); $pdf->SetFont('Arial', '', 10); // 定义列宽:日期列固定80,响应列占页面剩余宽度 $dateColWidth = 80; $responseColWidth = $pdf->GetPageWidth() - $dateColWidth - $pdf->lMargin - $pdf->rMargin; foreach ($data as $row) { // 先计算两列内容的渲染高度(不绘制边框) $pdf->SetFont('Arial', '', 10); $dateHeight = $pdf->MultiCell($dateColWidth, 10, $row['Date'], 0, 'C', false, 0, '', '', true, 0, false, true, 10, 'M'); $responseHeight = $pdf->MultiCell($responseColWidth, 10, $row['Response'], 0, 'L', false, 0, '', '', true, 0, false, true, 10, 'M'); // 取最大高度作为当前行的统一高度 $rowHeight = max($dateHeight, $responseHeight); // 回到当前行起始位置,绘制带边框的日期单元格 $currentY = $pdf->GetY() - $rowHeight; $pdf->SetXY($pdf->lMargin, $currentY); $pdf->MultiCell($dateColWidth, $rowHeight, $row['Date'], 1, 'C', true); // 绘制带边框的响应单元格 $pdf->SetXY($pdf->lMargin + $dateColWidth, $currentY); $pdf->MultiCell($responseColWidth, $rowHeight, $row['Response'], 1, 'L', true); } // 输出PDF到浏览器 $pdf->Output();
方案说明
MultiCell原生支持文本自动换行,解决内容重叠问题- 先计算内容高度,再统一绘制单元格,确保两列高度一致,适配两种数据场景
- 响应列宽度自动适配页面,避免固定宽度导致的内容溢出
- 保留原有的表头样式和字体设置,保证视觉一致性
内容的提问来源于stack exchange,提问作者Aqib Javaid
相关产品推荐
相关产品推荐

