【问题标题】:fpdf + php how to insert an image in a cell on right side in pdf document?fpdf + php如何在pdf文档右侧的单元格中插入图像?
【发布时间】:2015-05-22 11:26:35
【问题描述】:
$image1 = "call.png";
$pdf->Cell(0,8,$pdf->Image($image1, $pdf->GetX()+2, $pdf->GetY()+2, 20.78),0,0,'',true);

我尝试使用上面的代码在 pdf 文档的单元格中插入图像。我想在单元格的右侧对齐此图像。

【问题讨论】:

  • 您需要检索文档的 X_max,从中减去图像的宽度,然后将其插入从减法获得的 X 中?

标签: php fpdf


【解决方案1】:

在 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();

如果您打算经常使用它,我建议您将它放入一个函数或类似的东西中。请注意,这仅适用于 right 对齐。您将对 center 对齐的不同计算执行类似的方法。页面左右边界由FPDF定义,可以在构造函数中设置SetMargins

【讨论】:

  • 我删除了这一行 $hPdf = $pdf-&gt;hPt; 并在 $width = $wPdf - $wImg; 之后添加了这一行 $height = $hImg; 以停止变量未定义错误。一旦我这样做了,它就奏效了,谢谢。
  • 这是我得到的错误:PHP 致命错误:无法访问受保护的属性 FPDF::$wPt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2020-06-23
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多