我遇到了完全相同的问题;我使用 FPDF 生成发票,每行有四个单元格,第一个单元格是具有不同高度的 MultiCell(默认高度为 5,但如果订单名称太长,它会在总高度 10 中添加另一行,依此类推) .问题是剩下的 3 个单元格的高度是固定的。
在寻找解决方案之后,似乎唯一的方法是编写一个复杂的函数或使用一些第三方工具。由于我希望我的应用程序尽可能轻巧,因此我使用了以下方法来解决它,我认为这比外部插件要简单得多。
- 发票详细信息的行从 Y=95 开始,所以我使用
$Y=95;
在我的 while 循环之前
-
我的第一个单元格(MultiCell)如下:
$pdf->SetXY(10,$Y);
$pdf->MultiCell(60,5,$row['Name'],1,1,'L');
-
我使用 FPDF 的 GetY() 函数获取当前高度并将其保存为 H:
$H = $pdf->GetY();
如果 MultiCell 的高度为 5,GetY() 将返回 100,如果高度为 10,GetY() 将返回 105,依此类推。
-
我添加了新变量 $height:
$height= $H-$Y;
结果正好给了我 MultiCell 的高度。
-
我使用 $Y 和 $height 来设置当前位置和列高:
$pdf->SetXY(130,$Y);
$pdf->Cell(40,$height,$row['RowName'],1,1,'L');
-
在完成while循环集之前给$Y $H的值:
$Y=$H;
整个循环如下所示并且完美运行:
$Y= 95;
$query = mysqli_query($con,"SELECT * FROM table");
while($row = mysqli_fetch_array($query)) {
$pdf->SetXY(10,$Y);
$pdf->MultiCell(60,5,$row['ROW1'],1,1,'L');
$H = $pdf->GetY();
$height= $H-$Y;
$pdf->SetXY(70,$Y);
$pdf->Cell(60,$height,$row['ROW2'],1,1,'L');
$pdf->SetXY(130,$Y);
$pdf->Cell(40,$height,$row['ROW3'],1,1,'L');
$pdf->SetXY(170,$Y);
$pdf->Cell(30,$height,$row['ROW4'],1,1,'L');
$Y=$H;
}
如果每行有 2 个或更多 MultiCell 列,这会变得很棘手,但仍然可以用类似的方式解决。