我正在尝试创建一个小型Web服务,将PDF文件转换为一系列图像。
当我通过ssh连接到[Mediatemple(gs)]服务器时运行convert /full/path/to/source.pdf full/path/to/target.jpg
,一切正常。
通过PHP的exec()
函数执行相同的命令时,只转换PDF文件的前几页。有时剩余的页面是0长度的jpg文件,有时它们根本不出现。
此外,第一页的底部区域有时是黑色的,就像转换在页面中途停止一样。
可能导致此问题的原因是什么?
更新
我正在使用set_time_limit(0)。
如果我通过SSH连接,并运行命令convert -limit area 90 ...
,它将在大约成功完成。 30秒。当通过PHP-s exec()执行相同操作时,它运行约90秒并产生损坏的图像(如上所述)作为输出。
是否有一种简单的方法可以使用与SSH相同的权限和资源来运行转换任务?
此外,由于解决服务器问题一定非常令人沮丧,我无法控制 - 是否有一个良好的现有Web服务(API)可以将PDF转换为图像?
答案 0 :(得分:0)
重新更新:你能尝试转换一个小小的PDF来看看它是否是一个内存问题?
此外,ImageMagick有一个debug
命令行选项:
convert -debug "All" /full/path/to/source.pdf full/path/to/target.jpg
我认为它调试到stdout,你必须捕获它记录的内容并输出它。 手动here
另外,我认为要转换PDF,ImageMagick需要调用ghostscript(我认为二进制文件是gs
)。您可以尝试确保可以使用PHP运行的用户的权限进行调用吗?如果不是,ImageMagick 应该返回错误,但你永远不知道。
答案 1 :(得分:0)
试图让它在共享服务器上运行,并将应用程序移动到另一台服务器 - 现在一切正常。
我认为服务器资源限制(主要是一些内存限制)干扰了ImageMagick,并且以非常不一致的方式这样做了。限制ImageMagick的内存使用仍然会产生错误,并且无法成功转换文件。