【问题标题】:Multiple images in one PDF file一个 PDF 文件中的多个图像
【发布时间】:2018-11-27 13:08:14
【问题描述】:

搜索 mPdf 代码示例以将多个图像转换为单个 Pdf。但我失败了。任何有任何代码示例或要阅读的链接的人请提出建议。提前致谢。

    <?php
require_once("mpdf60/mpdf.php");
$imageStorage='';
$p1=$_FILES['p1']['name'];
$p1Temp=$_FILES['p1']['tmp_name'];
$p2=$_FILES['p2']['name'];
$p2Temp=$_FILES['p2']['tmp_name'];
$p3=$_FILES['p3']['name'];
$p3Temp=$_FILES['p3']['tmp_name'];
$p4=$_FILES['p4']['name'];
$p4Temp=$_FILES['p4']['tmp_name'];
$imageStorage=$_FILES['p1']['tmp_name'],$_FILES['p2']['tmp_name'],$_FILES['p3']['tmp_name'];,$_FILES['p4']['tmp_name'];

class PDF extends MPDF {
  const DPI = 96;
  const MM_IN_INCH = 25.4;
  const A4_HEIGHT = 297;
  const A4_WIDTH = 210;
// tweak these values (in pixels)
  const MAX_WIDTH = 800;
  const MAX_HEIGHT = 500;
  function pixelsToMM($val) {
    return $val * self::MM_IN_INCH / self::DPI;
  }
  function resizeToFit($imgFilename) {
    list($width, $height) = getimagesize($imgFilename);
    $widthScale = self::MAX_WIDTH / $width;
    $heightScale = self::MAX_HEIGHT / $height;
    $scale = min($widthScale, $heightScale);
    return array(
      round($this->pixelsToMM($scale * $width)),
      round($this->pixelsToMM($scale * $height))
    );
  }
  function centreImage($img) {
    list($width, $height) = $this->resizeToFit($img);
    $this->Image(
      $img, (self::A4_HEIGHT - $width) / 2,
      (self::A4_WIDTH - $height) / 2,
      $width,
      $height
    );
  }
}


$pdf = new PDF();
$pdf->AddPage("L");
$pdf->centreImage($imageStorage);
$pdf->Output();

?>

这是我尝试过的代码。但是失败了

【问题讨论】:

  • 显示您尝试的代码。
  • @MawiaHL 我更新了我的问题。请帮助
  • 您的预期输出是什么?请问您可以将其添加到您的问题中吗?
  • @MawiaHL 我的预期输出是一个 Pdf 中的所有图像

标签: php image-processing mpdf


【解决方案1】:

你的这行代码完全错误:

$imageStorage=$_FILES['p1']['tmp_name'],$_FILES['p2']['tmp_name'],$_FILES['p3']['tmp_name'];,$_FILES['p4']['tmp_name'];

如果你想获取上传的图片,你可以像下面这样格式化你的html:

生成pdf.php

<form method="post" action="uploaded.php" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple>
    <input type="submit" name="submit" value="Upload">
</form>

使用上面的html,可以上传多张图片。并且您使用以下 php 代码获取上传的图像:

上传的.php

require_once("mpdf.php");//
$uploaded = [];//New empty array for holding uploaded images
foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
  $uploaded[] = file_get_contents($_FILES['files']['tmp_name'][$key]);
}

由于 MPDF image() 方法不接受图像资源,我使用了 GD 图像函数的快速解决方法。所以你的新 PDF 类:

class PDF extends MPDF {
  const DPI = 96;
  const MM_IN_INCH = 25.4;
  const A4_HEIGHT = 297;
  const A4_WIDTH = 210;
// tweak these values (in pixels)
  const MAX_WIDTH = 800;
  const MAX_HEIGHT = 500;
  function pixelsToMM($val) {
    return $val * self::MM_IN_INCH / self::DPI;
  }
  function resizeToFit($imgFilename) {
    list($width, $height) = getimagesizefromstring($imgFilename);
    $widthScale = self::MAX_WIDTH / $width;
    $heightScale = self::MAX_HEIGHT / $height;
    $scale = min($widthScale, $heightScale);
    return array(
      round($this->pixelsToMM($scale * $width)),
      round($this->pixelsToMM($scale * $height))
    );
  }
  function centreImage($imgdata) {
    list($width, $height) = getimagesizefromstring($imgdata);//Old size
    list($newwidth, $newheight) = $this->resizeToFit($imgdata);//new size
    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromstring($imgdata);
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  
    ob_start(); // Let's start output buffering.
    imagejpeg($thumb); //This will normally output the image, but because of ob_start(), it won't.
    $contents = ob_get_contents(); //Instead, output above is saved to $contents
    ob_end_clean(); //End the output buffer.    
    return $contents;
  }
}

在一个 PDF 上生成图像的代码:

$pdf = new PDF();
$pdf->AddPage("L");
$pdf->SetColumns(4,2);//Four columns, 2mm gap between the columns
$pdf->max_colH_correction = 10;
foreach($uploaded as $changefile){
  $pdf->WriteHTML("<img src='data:image/jpeg;base64,".base64_encode($pdf->centreImage($changefile))."' />");
}  
$pdf->Output('filename.pdf','F');

我没有太多时间玩 MPDF image() 方法。您可以访问该链接,看看您可以玩什么。我希望这会对您有所帮助,并为您提供与 GD library 一起工作的东西。

【讨论】:

  • 谢谢..真的很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2019-02-08
  • 2013-10-25
  • 2012-07-04
相关资源
最近更新 更多