MultiCell元素的FPDF高度

问题描述:

我使用FPDF库将某些文档文件导出为PDF。一个文档包含具有不同长度的字符串列表。我将所有字符串打印为$pdf->MultiCell()。现在,我希望MultiCell的当前高度在行数超过一行的情况下具有相同的行间距。MultiCell元素的FPDF高度

代码示例:

//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() 
} 
+0

你究竟想做什么?你说你需要高度,但是你动态地设置x坐标,你想获得宽度吗?如果你想获得单元格的高度,在'MultiCell()'之前和之后调用'getY()'。 –

我有完全相同的问题;我使用FPDF生成发票,并且每行有四个单元格,第一个单元格是具有不同高度的MultiCell(默认高度为5,但如果顺序名称太长,则会将另一行添加到总高度为10的位置,依此类推) 。问题是剩余的3个单元具有固定的高度。

寻找解决方案后,它似乎唯一的办法是编写一个复杂的功能或使用一些第三方工具。由于我希望我的应用程序尽可能轻,因此我使用以下方法来解决此问题,在我看来,这比外部插件更简单。

  1. 行与在Y中的发票开始,详情= 95,所以我用我的while循环
  2. 我的第一个单元格(多细胞)之前$Y=95; 如下:

    $pdf->SetXY(10,$Y); 
    $pdf->MultiCell(60,5,$row['Name'],1,1,'L'); 
    
  3. 我使用FPDF的GetY()函数获取当前高度并将其保存为H:

    $H = $pdf->GetY(); 
    

    如果MultiCell的高度为5,GetY()将返回100,如果高度为10,则GetY()返回105,依此类推。

  4. 我添加新的变量$高度:

    $height= $H-$Y; 
    

    其中作为结果让我多细胞的精确高度。

  5. 我使用$ Y和$高度设置当前位置和柱高度:

    $pdf->SetXY(130,$Y); 
    $pdf->Cell(40,$height,$row['RowName'],1,1,'L'); 
    
  6. 完成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列,它会变得棘手,但仍然可以用类似的方式解决。