使用本地PHP API将PDF转换为JPG的ImageMagick/Imagick。

12
我试图将PDF文件转换为PNG格式。在命令行中它可以完美地工作(我安装了GhostScript 8.64)。但在PHP中,我遇到了问题:
代码:
$im = new Imagick($pdf_file); // this is where it throws the exception below

输出:

Fatal error: Uncaught exception ‘ImagickException’ with message ‘Postscript delegate failed `23_1235606503.pdf’: No such file or directory @ pdf.c/ReadPDFImage/612′ in get_thumbnail.php:93
Stack trace:
\#0 get_thumbnail.php(93): Imagick->__construct(’…’)

我不确定我在这里做错了什么,但我怀疑这与我的服务器配置有关。 我正在运行: Apache 2.2.11 PHP 5.2.8 ImageMagick 6.4.8-9 GhostScript 8.64

3个回答

18

终于弄清楚了。GhostScript可执行文件(gs)不在Apache的环境路径中,而是在/usr/local/bin目录下。我尝试了几种方法将/usr/local/bin添加到路径中,但没有成功。最后我在/usr/bin directory中为gs创建了一个符号链接。现在一切都运作得很完美。


2
如何知道 Apache 环境路径? - Arnold Roa
2
太好了!只需添加以下内容来创建符号链接:sudo ln -s /usr/local/bin/gs /usr/bin/gs - Ondrej Rafaj
一直收到“无法读取文件错误”的提示,现在问题已经解决了。谢谢兄弟。 - Anriëtte Myburgh
当我使用ImageMagick通过Apache和编程语言将PDF的一页转换为JPEG时,尽管图像存在且权限完全开放,但我收到了错误消息“convert:未定义图像...”。在卸载GhostScript和ImageMagick后,重新安装GS和IM与GS,并添加符号链接最终解决了这个问题。请参见https://github.com/delphian/drupal-convert-file/wiki/Installing-ImageMagick-on-Mac-OSX-for-PHP-and-MAMP#manual-installation - Steve Piercy

5

我在Stackoverflow上没有足够的“声望”来添加评论,但是在我的Mac中进行最新的Sierra更新时,我必须执行额外的步骤才能使其正常工作。

当您输入以下命令时:

sudo ln -s /usr/local/bin/gs /usr/bin/gs

在Mac上,你可能会遇到“操作不允许”的错误。显然,苹果公司做了一个改变,“bin”目录是不可编辑的,除非你禁用SIP(系统完整性保护)。因此,以下是禁用SIP的步骤:
1. 重新启动你的Mac进入Recovery Mode,方法是重启电脑并按住“Command + R”,直到屏幕上出现苹果标志。
2. 点击“Utilities>Terminal”。
3. 在终端窗口中,输入“crutil disable”并按下“Enter”。
4. 重新启动你的Mac。
我刚刚完成了这些步骤,现在我的Ghostscript工作得很好,我成功地将PDF转换为JPG。

之后,我重新启用了系统完整性保护,Ghostscript 仍然可以正常工作。 - Jacco van der Post

-4

我已经成功地完成了这个任务。以下是我用来进行转换的代码。我们正在商业上使用这个解决方案。我知道这个问题已经存在一段时间了,但它仍然可能对你有所帮助。

//Convert PDF contract to image using ImageMagik and Ghostscript
// NOTE: This will need to be change if running on Linux
$source = $appDir."\\".$clientID."\\".$clientID.".pdf";
$dest = $appDir."\\".$clientID."\\".$clientID.".jpg";
//print("c:\\IM\\convert.exe $source $dest ");
exec("c:\\IM\\convert.exe $source $dest ");

@CarlosBarbosa,convert.exe是Windows版本的ImageMagick中包含的二进制文件(在*nix操作系统上只需使用convert)。虽然我同意这不是最好的答案,但这是解决OP遇到的问题的一种方法。 - Andrew Ensley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接