【问题标题】:Imagick PHP only displaying last pageImagick PHP 只显示最后一页
【发布时间】:2019-06-29 13:03:45
【问题描述】:

我在 PHP/Windows IIS 中使用 imagick。我有一个简单的脚本,可以将 TIF 文件转换为 PDF 并将其呈现给浏览器。它可以完美地处理单页 TIF 文件,但对于多页,它只显示最后一页。

我知道它默认显示最后一页,因为 $im 变量是一个数组。我为修复它所做的任何尝试都会使其成为无效的 PDF。下面是我的代码。我是 imagick 的新手,不胜感激!

$im = new imagick("tmp/tmp.tif");
$im->setImageFormat('pdf');
header('Content-Type: application/pdf');
echo $im;

ImageMagick 版本 ImageMagick 7.0.7-11 Q16 x64 2017-11-23

ImageMagick 库版本 ImageMagick 7.0.7-11 Q16 x64 2017-11-23

(这是很粗略的测试代码,稍后我会清理它)

【问题讨论】:

    标签: php iis imagemagick imagick


    【解决方案1】:

    内部图像迭代器指向读取的最后一页。您只需使用Imagick::setFirstIterator 将其重置为第一页。

    $im = new imagick("tmp/tmp.tif");
    $im->setFirstIterator();
    $im->setImageFormat('pdf');
    header('Content-Type: application/pdf');
    echo $im->getImage();
    

    甚至

    $im->setIteratorIndex(0);
    

    基于 cmets 编辑

    如果您尝试输出整个 PDF 文档,您可以使用Imagick::getImagesBlob

    $im = new imagick("tmp/tmp.tif");
    $im->setFirstIterator();
    $im->setImageFormat('pdf');
    $blob = $im->getImagesBlob();
    header('Content-Type: application/pdf');
    header('Content-Length: ' . strlen($blob));
    echo $blob;
    

    【讨论】:

    • 感谢@emcconville!现在它显示第一页,但只显示第一页:(即使在 $im 上执行 foreach 循环也只显示第一页:(
    • 您可能需要根据您的期望更新问题,或者至少澄清一下。 Image.getImage 只会返回一页。如果您想将整个文档提供给浏览器,则只需调用 echo $im; 而无需使用页面迭代器。
    • 好吧,我也试过没有->getImage(只是echo $im),我得到了相同的结果,只是最后一页。
    • 搞定了。我需要添加您的$im->setFirstIterator(); 并将$im->getImage(); 更改为$im->getImagesBlob();,现在它会转换所有页面并显示所有页面。
    • @alexander7567 您应该将您的解决方案发布为另一个答案,而不是尝试编辑其他答案。另外,您可以接受自己的答案作为原始问题的解决方案(这将有助于未来的读者)。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 2022-11-17
    • 2021-07-18
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多