php - Imagick PHP 只显示最后一页
问题描述
我正在将 imagick 与 PHP/Windows IIS 一起使用。我有一个简单的脚本,可以将 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
(这是非常粗略的测试代码,我稍后会清理它)
解决方案
内部图像迭代器指向读取的最后一页。您只需要使用 将其重置为第一页Imagick::setFirstIterator
。
$im = new imagick("tmp/tmp.tif");
$im->setFirstIterator();
$im->setImageFormat('pdf');
header('Content-Type: application/pdf');
echo $im->getImage();
甚至
$im->setIteratorIndex(0);
根据评论编辑
如果您尝试输出整个 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;
推荐阅读
- ios - SwiftUI:路径的坐标空间
- python - 我遇到错误“ModuleNotFoundError:没有名为 '__main__.models' 的模块;'__main__' 不是包”
- c++ - g++ 和 clang++ 使用别名来定义方法的不同行为
- java - 我如何使双精度值在 java 中具有尾随零。我的程序处理货币
- javascript - Node.js - 在字符串之外使用模板文字
- react-native - 平面列表数据未显示在屏幕上
- spring - 如何使用spring boot仅将程序特定日志写入spring批处理中的文件
- powershell - Python 的 doctest 模块是否有 PowerShell 等价物?
- python - 如何将十进制数转换为具有最小值的基数?
- c# - 使用 Verlet 方法在 unity2d 中绘制火鸡