Imagick以及phmagick的问题:Postscript委托失败/没有这样的文件或目录

时间:2012-05-04 20:51:48

标签: php pdf imagemagick ghostscript imagick

我正在使用imagick 3.0.1和phmagick(http://www.francodacosta.com/phMagick/download)。无论如何,当我尝试将PDF转换为JPEG时,两者都给出了同样的错误。

例如: Postscript委托失败了`/ tmp / magick-bfxIrUJ5':没有这样的文件或目录@ error / pdf.c / ReadPDFImage / 669

我正在使用Ghostcript-9.05(在/ usr / local / bin / gs上运行)。 还有ImageMagick-6.7.6-8(在/ usr / local / bin / convert上运行)。

我已经检查了文件夹的权限(755)。 ImageMagick在Terminal工作得很好。

例如,我的PHP使用Imagick:

//use imagick
$im = new imagick( '/pdf/553571072.pdf' );

// convert to jpg
$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setImageFormat('jpeg');

//write image on server
$im->writeImage('/jpg/553571072.jpg');

顺便说一句,Imagick会出现在我的phpinfo()中。我正在使用linux / apache / amd64。

任何建议都将受到高度赞赏!

3 个答案:

答案 0 :(得分:16)

好的,这要归功于Nuno Franco da Costa(http://www.francodacosta.com/)的帮助。

问题是我的GhostScript路径对于Shell来说是好的,但是系统和PHP是错的。要更正这一点,您应将/usr/local/bin/gs文件与/usr/bin/gs相关联。

从Shell执行以下操作:

[root@din ~]# convert -list configure | grep -i delegates
DELEGATES     bzlib fontconfig freetype jpeg jng png tiff x11 xml zlib

检查gs中是否已存在/usr/bin文件。如果是,我们将创建它的备份 如果没有/usr/bin/gs,您可以跳过此步骤

[root@din ~]# ls -l /usr/bin/gs
-rwxr-xr-x 1 root root 6024 Sep 30  2010 /usr/bin/gs
[root@din ~]# mv /usr/bin/gs /usr/bin/gs.orig

现在创建从/usr/local/bin/gs/usr/bin/gs的链接

[root@din ~]# sudo ln -s /usr/local/bin/gs /usr/bin

那应该解决问题。非常感谢你们。

答案 1 :(得分:5)

我对@HelloWorld (谢谢!)在接受的答案的评论中提出的“纯PHP解决方案”做出了贡献,稍加纠正:必须添加变量名< / b>在扩展默认PATH之前,所以
putenv( getenv('PATH') . ':/usr/local/bin' );不起作用,但是 putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' );

*我的声誉不到50分,无法在正确的地方添加我的评论,所以我不得不创建一个新答案: - )

答案 2 :(得分:1)

我使用 ImageMagick ImageMagick 6.7.7-10并使用 GhostScript 9.10来解决这些问题。

事实证明PDF已损坏,虽然一些较新的GS版本可以读取它们,但是由于以下错误,这个旧版本不能。

   **** Warning:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transfering the file.
   **** Ghostscript will attempt to recover the data.

在Linux下,您可以先通过 pdftk 传递PDF:

pdftk 'bad.pdf' output 'fixed.pdf'

之后,Ubuntu上的一切都对我有用。