不能将Imagemagick与PHP的exec()中的PDF一起使用,从CLI可以使用

问题描述 投票:0回答:1

我正在尝试使用exec()从PHP使用Imagemagick管理一些PDF。我已经简化了我的测试用例,并发现尽管PDF在命令行中运行良好,但它们并不适用于PHP。

从命令行:

$ identify /var/tmp/doc-98563.png 
/var/tmp/doc-98563.png PNG 2550x3300 2550x3300+0+0 8-bit Gray 256c 1.24178MiB 0.000u 0:00.009

$ identify /var/tmp/doc-35765.pdf
/var/tmp/doc-35765.pdf[0] PDF 419x595 419x595+0+0 16-bit ColorSeparation CMYK 997321B 0.120u 0:00.119
/var/tmp/doc-35765.pdf[1] PDF 419x595 419x595+0+0 16-bit ColorSeparation CMYK 997321B 0.110u 0:00.109

大!正确识别我的文件,PNG或PDF。

我还可以确认文件的权限就好了:

$ ls -la /var/tmp/doc*
-rw-r--r--  1 _www  wheel   1.6M 15 May 10:05 /var/tmp/doc-35765.pdf
-rw-r--r--  1 _www  wheel   1.2M 15 May 10:01 /var/tmp/doc-98563.png

从PHP运行等效的...

exec('identify /var/tmp/doc-98563.png', $output, $exitcode);
var_dump($output);
var_dump($exitcode);

unset($output);

exec('identify /var/tmp/doc-35765.pdf', $output, $exitcode);
var_dump($output);
var_dump($exitcode);

......产生不同的结果:

array(1) {
    [0]=>
    string(93) "/var/tmp/doc-98563.png PNG 2550x3300 2550x3300+0+0 8-bit Gray 256c 1.24178MiB 0.000u 0:00.000"
}
int(0)
array(0) {
}
int(1)

因此,PNG在两个地方的工作方式相同(如预期的那样),但PDF只是...而不是。

我在两者上检查了convert -versionconvert -list format,两者都是相同的(ImageMagick 7.0.7-32,PDF PDF rw+ Portable Document Format)。我还特定了完整路径/usr/local/bin/identify ...来验证它肯定运行相同的IM实例。对于我可以看到的与PDF和PNG相关的所有内容,文件权限是相同的,所以不要认为是这样。

运行gs使用相同的文件从PHP工作正常,但gs不能做我需要的。

还有什么我可以尝试的吗?

作为参考,我在OSX上使用PHP7.2,它和ImageMagick(和Ghostscript)都与Brew一起安装。

php pdf imagemagick
1个回答
1
投票

这是一个常见问题。看来PHP环境通常找不到Ghostscript。解决这个问题的一种方法是编辑已安装的delegates.xml文件,将完整路径放到ghostscript,例如,命令=“”gs“的所有条目中的gs。这将是PDF,PS,EPS。另一种方法是修改PHP环境变量以将GS放入PHP PATH中。

© www.soinside.com 2019 - 2024. All rights reserved.