FPDF中Cell与MultiCell定位问题求助
FPDF Cell与MultiCell布局定位问题解决方法
你的核心问题是MultiCell执行后会自动将输出位置跳转到下一行开头,导致后续的Cell无法和MultiCell保持同一行对齐,从而打乱了布局。
修改后的代码方案
通过SetXY()手动控制坐标位置,先记录MultiCell绘制前的Y坐标,绘制完第一个地址后回到该位置,调整X坐标再绘制第二个地址,确保两者在同一行:
// 记录当前Y轴坐标,用于后续对齐 $currentY = $pdf->GetY(); // 绘制第一列标题(MAILING ADDRESS) $pdf->Cell(60, 6, 'MAILING ADDRESS', 'L,R', 0); // 绘制第一个购买者的地址(MultiCell) $pdf->MultiCell(65, 5, $puchaser1[0]["address"], 1); // 回到记录的Y坐标,X坐标偏移到第二个地址的起始位置(60+65) $pdf->SetXY(60 + 65, $currentY); // 绘制第二个购买者的地址,高度和MultiCell保持一致(这里假设地址是2行,5*2+1=11,也可以动态计算高度) $pdf->Cell(65, 11, $puchaser2[0]["address"], 1, 1); // 电话行的绘制逻辑无需修改,因为都是单行内容 $pdf->Cell(60, 8, 'PHONE NUMBER', 1, 0); $pdf->Cell(65, 8, $puchaser1[0]["contact_no"], 1, 0); $pdf->Cell(65, 8, $puchaser2[0]["contact_no"], 1, 1);
更灵活的动态高度适配
如果地址的行数不固定,可以先计算MultiCell的高度,再统一设置单元格高度,避免布局错位:
// 先计算第一个地址MultiCell的高度(不实际输出,仅计算) $addrHeight = $pdf->MultiCell(65, 5, $puchaser1[0]["address"], 0, 'L', false); // 回到初始位置,绘制标题,高度和地址单元格一致 $pdf->SetXY(0, $pdf->GetY()); $pdf->Cell(60, $addrHeight, 'MAILING ADDRESS', 'L,R', 0); // 绘制第一个购买者地址(带边框) $pdf->MultiCell(65, 5, $puchaser1[0]["address"], 1); // 定位到第二个地址的位置,高度和第一个地址一致 $pdf->SetXY(60 + 65, $pdf->GetY() - $addrHeight); $pdf->Cell(65, $addrHeight, $puchaser2[0]["address"], 1, 1); // 电话行绘制 $pdf->Cell(60, 8, 'PHONE NUMBER', 1, 0); $pdf->Cell(65, 8, $puchaser1[0]["contact_no"], 1, 0); $pdf->Cell(65, 8, $puchaser2[0]["contact_no"], 1, 1);
效果对比
当前问题效果:
预期布局效果:
内容的提问来源于stack exchange,提问作者Choegofps
相关产品推荐
相关产品推荐

