带有Node的ghostScript会产生致命错误

时间:2014-09-08 09:42:21

标签: node.js pdf ghostscript

我使用带有Node的ghostscript(在MacOX和Ubuntu上运行)。我的ghostscript命令是这样的:

/usr/local/bin/gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf 

当我手动运行此命令时,它可以正常工作。当NodeJS启动时,我收到此错误:

[2014-09-08 10:33:20.587] [INFO] console - { [Error: Command failed: GPL Ghostscript 9.10: Unrecoverable error, exit code 1
] killed: false, code: 1, signal: null }
Error: Command failed: GPL Ghostscript 9.10: Unrecoverable error, exit code 1

at ChildProcess.exithandler (child_process.js:647:15)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:753:16)
at Socket.<anonymous> (child_process.js:966:11)
at Socket.EventEmitter.emit (events.js:95:17)
at Pipe.close (net.js:465:12)

节点代码如下所示:

var execCommand = config.ghostScript + " -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=" + finalFileName + " -dBATCH " + inputFiles;
exec(execCommand, function (error, stdout, stderr) {
    if ( error !== null ) {
        var err = new Error("pdf could not be generated");
        err.status = constants.HTTPCODE_INTERNAL_SERVER_ERROR;
        throw err;
    } else {
        console.log("success");
    }

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你可以考虑使用Ghostscript4JS,它是一个绑定Ghostscript C命令API的模块,可以将它的功能带到Node.JS世界。 https://www.npmjs.com/package/ghostscript4js

Ghostscript4JS是一个本机Node.JS插件,因此您可以直接从JavaScript代码调用C命令Ghostscript API。通过这种方式,您可以获得两个好处:

  1. 更好的错误处理: 您可以通过try / catch为sync方法直接拦截错误,然后通过/ catch方法拦截异步方法。
  2. 性能 与直接从Node.js环境调用C或C ++ API相比,对shell命令的调用需要更多的时间和更多的资源。
  3. 作为程序员,您可以更好地控制调用外部工具。

答案 1 :(得分:0)

我怀疑user1283633是正确的。无论如何,你应该首先打印出你的执行官中的内容。变量,看看它是否符合你的期望。当人们说“这个命令行有效”时,10次中有9次,但是当我把它放在我的程序中时,它并没有#9;事实证明,他们的应用程序生成的内容并不是同一个命令行。

您还应该从Ghostscript中捕获stdout和stderr(如果没有别的东西可以将它们重定向到文件)。毫无疑问,Ghostscript会打印有关该问题的更多信息,而您只是将其丢弃。