我使用FPDF库将一些文档文件导出为PDF.一个文档包括具有不同长度的字符串列表.我将所有字符串打印为$pdf->MultiCell()
.现在我希望MultiCell的当前高度具有相同的行间距,以防它们只有一行或更多行.
代码示例:
//MySQL Query
while($row = mysql_fetch_array($res) {
$pdf->SetXY(18, $x);
$pdf->MultiCell(80, 5, $rowr['text']); //text has one or more lines
$x = $x + 10; // Here I would prefer a solution to say: $x = $x + 2 + height of the MultiCell()
}
Run Code Online (Sandbox Code Playgroud)
小智 18
我有同样的问题; 我使用FPDF生成发票,每行有四个单元格,第一个单元格是高度不同的MultiCell(默认高度为5,但如果订单名称太长,则会在总高度10上添加另一行,依此类推) .问题是剩下的3个细胞有固定的高度.
在寻找解决方案之后,似乎唯一的方法是编写复杂的函数或使用某些第三方工具.由于我希望我的应用程序尽可能轻,我使用以下方法来解决它,在我看来,这比外部插件更简单.
$Y=95;
在while循环之前使用我的第一个单元格(MultiCell)如下:
$pdf->SetXY(10,$Y);
$pdf->MultiCell(60,5,$row['Name'],1,1,'L');
Run Code Online (Sandbox Code Playgroud)我使用FPDF的GetY()函数来获取当前高度并将其保存为H:
$H = $pdf->GetY();
Run Code Online (Sandbox Code Playgroud)
如果MultiCell的高度为5,则GetY()将返回100,如果高度为10,则GetY()返回105,依此类推.
我添加了新的变量$ height:
$height= $H-$Y;
Run Code Online (Sandbox Code Playgroud)
结果给出了我精确的MultiCell高度.
我使用$ Y和$ height来设置当前位置和列高:
$pdf->SetXY(130,$Y);
$pdf->Cell(40,$height,$row['RowName'],1,1,'L');
Run Code Online (Sandbox Code Playgroud)在完成while循环设置之前,给$ Y $ H的值:
$Y=$H;
Run Code Online (Sandbox Code Playgroud)整个循环看起来如下并且完美地运行:
$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;
}
Run Code Online (Sandbox Code Playgroud)
如果每行中有2个或更多的MultiCell列,它会变得棘手,但仍然可以以类似的方式解决.
归档时间: |
|
查看次数: |
23690 次 |
最近记录: |