FPDF + PHP如何在PDF文档右侧的单元格中插入图像


fpdf + php how to insert an image in a cell on right side in pdf document?

$image1 = "call.png";
$pdf->Cell(0,8,$pdf->Image($image1, $pdf->GetX()+2, $pdf->GetY()+2, 20.78),0,0,'',true);

我尝试了上面的代码在pdf文档的单元格中插入图像。我想在单元格的右边对齐这个图像

在FPDF中,宽度和高度分别有内部变量wh。然而,这些都是用用户单位表示的。默认情况下,这是毫米。图像总是以像素表示,这可能会导致问题。也就是说,FPDF还跟踪wPthPt,它们以一种非常容易与像素单位进行比较的方式为您提供尺寸。最后是k,这是一个比例单位,可用于从用户单位转换为像素。

我们将做以下事情:

  • 使用getimagesize
  • 获取图像尺寸
  • 使用$pdf->w
  • 获取页面尺寸(以像素为单位)
  • 计算总页面宽度并减去图像宽度以获得我们需要的左侧填充
  • 使用$pdf->k将左侧填充从像素转换为用户单位
  • $pdf->Cell
  • 在图像左侧打印一个空白的边界单元格
  • 使用$pdf->Image打印图像

我们将而不是将图像放在单元格中。不要这样做。细胞不是为图像而生,而是为字符串而生。如果你尝试这种方法,你不会得到预期的结果。相反,选择上面的方法。代码如下:

//  Get image dimensions
$size = getimagesize('img.png');
if( $size===false )
    die('Image does not exist.');
$wImg = $size[0];
$hImg = $size[1];
//  Get PDF dimensions
$wPdf = $pdf->wPt;
$hPdf = $pdf->hPt;
//  Calculate width necessary for the cell
$width  = $wPdf - $wImg;
if( $width<0 )
{
    error_log('Image is larger than page we''re trying to print on.');
    $width = 0;
}
//  Convert pixel units to user units
$width  /= $pdf->k;
$height /= $pdf->k;
//  Print a boundary cell
$pdf->Cell($width,$height);
//  Print image
$pdf->Image('img.png');
//  Force a new line
$pdf->Ln();
如果你打算经常使用它,我建议你把它放入一个函数或类似的东西中。注意,这只适用于对齐。您将使用类似的方法对中心对齐进行不同的计算。页面的左右边界由FPDF定义,可以通过SetMargins
在构造函数中设置。