从PHP调用Ghostscript:无法打开初始设备

时间:2011-07-20 17:02:09

标签: php ghostscript

我已经从MacPorts安装了Ghostscript,并且我试图从PHP脚本调用它来从多页PDF文件中提取单页然后输出它。我的代码如下所示:

<?php

$cmd = '/opt/local/bin/gs -sDEVICE=pdfwrite -dNOPAUSE \
    -dBATCH -dSAFER -dFirstPage=20 -dLastPage=20
    -sOutputFile=%stdout  "/path/to/input/pdf.pdf"';

// Will uncomment this when it works
// header("Content-Type: application/pdf");

putenv("GS_LIB=/opt/local/share/ghostscript/9.02/lib");
putenv("GS_FONTPATH=/opt/local/share/ghostscript/fonts");
putenv("TMPDIR=/tmp");

passthru($cmd);

当我在网络浏览器中点击此脚本时,我看到:

GPL Ghostscript 9.02 (2011-03-30) Copyright (C) 2010 Artifex Software, Inc.
All rights reserved. This software comes with NO WARRANTY: see the file
PUBLIC for details. **** Unable to open the initial device, quitting.

同样的命令可以在shell中运行。

4 个答案:

答案 0 :(得分:5)

apache / webserver用户可能没有权限或相同的环境变量。也许尝试sudo,或确保apache具有适当的权限。

答案 1 :(得分:2)

我也遇到了这个错误,我花了5个小时才弄清楚它的解决方案是什么。注意这两个代码块之间的区别:

$cmd = '/opt/local/bin/gs -sDEVICE=pdfwrite -dNOPAUSE \
    -dBATCH -dSAFER -dFirstPage=20 -dLastPage=20
    -sOutputFile=%stdout  "/path/to/input/pdf.pdf"';

$cmd = '/opt/local/bin/gs -sDEVICE=pdfwrite -dNOPAUSE \
    -dBATCH -dSAFER -dFirstPage=20 -dLastPage=20 \
    -sOutputFile=%stdout  "/path/to/input/pdf.pdf"';

shell不了解意外的换行符,所以只需在每个换行符前面添加一个反斜杠\,问题就解决了。

答案 2 :(得分:1)

我通过删除行中的双引号来解决了这个问题:

$cmd = '/opt/local/bin/gs -sDEVICE=pdfwrite -dNOPAUSE \
-dBATCH -dSAFER -dFirstPage=20 -dLastPage=20
-sOutputFile=%stdout  /path/to/input/pdf.pdf';

在PHP + Ubuntu18.4 + Apache2.4上使用shell_exec测试

答案 3 :(得分:0)

在使用PHP调用pdf生成脚本时,遇到了**** Unable to open the initial device, quitting.错误消息。

我一直沿用权限和选项的路径,完全偶然地偶然发现了一些东西。我没有为PHP分配足够的内存来完成事务。

我添加了:

ini_set("memory_limit", "2048M");

在调用我的生成脚本之前,它已完成且没有错误。内存显然可能过多,但是您可以根据需要进行调整。