2015-05-22 41 views

回答

5

在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

+0

我删除了这一行'$ hPdf = $ pdf-> hPt;'并在'$ width = $ wPdf - $ wImg;'后面添加了这一行'$ height = $ hImg;'以停止变量未定义的错误。一旦我做到了,它就会很有帮助,谢谢。 –

相关问题