使用 Imagick 将多个图像转换为 pdf

Convert multiple images to a pdf using Imagick

提问人:Mathemagician 提问时间:7/16/2023 最后编辑:Mathemagician 更新时间:7/17/2023 访问量:52

问:

在下面的代码中,代码是通过 Ajax 发送的,代码是响应。问题是所有图像都在创建的 pdf 文件的单个页面中,我希望每个图像都在单独的页面中。$_POST['images']

$images = $_POST['images'];


$pdf = new Imagick();
$pdf->setFormat('pdf');

foreach ($images as $dataURL) {
    $data = substr($dataURL, strpos($dataURL, ',') + 1);
    $image = base64_decode($data);

    $imagick = new Imagick();
    $imagick->readImageBlob($image);

    $pdf->addImage($imagick);
}

$pdf->resetIterator();
$pdf = $pdf->appendImages(true);
        
header('Content-Type: applicaton/pdf');
echo $pdf->getImagesBlob();
$pdf->destory();
php ajax imagick

评论

0赞 Ken Lee 7/16/2023
您的异步请求(通过邮寄上传图像的文件)是多个但明显分开的,这是真的吗?

答:

0赞 Mathemagician 7/17/2023 #1

该函数采用两个参数:filename 和 adjoin。如果 adjoin 设置为 true,则每个图像都是 pdf(文档)的单独页面。此外,如果我们调用此函数并将 adjoin 设置为 true,那么当 PDF 被回显时,每个图像都在一个单独的页面上。使用它,我们可以有类似于以下代码的内容:Imagick::writeImages

$images = $_POST['images'];


$pdf = new Imagick();
$pdf->setFormat('pdf');

foreach ($images as $dataURL) {
    $data = substr($dataURL, strpos($dataURL, ',') + 1);
    $image = base64_decode($data);

    $imagick = new Imagick();
    $imagick->readImageBlob($image);

    $pdf->addImage($imagick);
}


// First we create a temporary file and write the pdf to it
$temp_name = '/tmp/output.pdf';
$pdf->writeImages($temp_name, true); // adjoin is true
unlink($temp_name); // Delete the temporary file

header('Content-Type: applicaton/pdf');
echo $pdf->getImagesBlob();
$pdf->destory();

请注意,我们已经删除了

$pdf->resetIterator();
$pdf = $pdf->appendImages(true);

在上面的代码中