You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:55:14