$image1 = "call.png";
$pdf->Cell(0,8,$pdf->Image($image1, $pdf->GetX()+2, $pdf->GetY()+2, 20.78),0,0,'',true);
我尝试了上面的代码在pdf文档的单元格中插入图像。我想在单元格的右边对齐这个图像
在FPDF中,宽度和高度分别有内部变量w
和h
。然而,这些都是用用户单位表示的。默认情况下,这是毫米。图像总是以像素表示,这可能会导致问题。也就是说,FPDF还跟踪wPt
和hPt
,它们以一种非常容易与像素单位进行比较的方式为您提供尺寸。最后是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