我使用带有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");
}
有什么想法吗?
答案 0 :(得分:1)
你可以考虑使用Ghostscript4JS,它是一个绑定Ghostscript C命令API的模块,可以将它的功能带到Node.JS世界。 https://www.npmjs.com/package/ghostscript4js
Ghostscript4JS是一个本机Node.JS插件,因此您可以直接从JavaScript代码调用C命令Ghostscript API。通过这种方式,您可以获得两个好处:
作为程序员,您可以更好地控制调用外部工具。
答案 1 :(得分:0)
我怀疑user1283633是正确的。无论如何,你应该首先打印出你的执行官中的内容。变量,看看它是否符合你的期望。当人们说“这个命令行有效”时,10次中有9次,但是当我把它放在我的程序中时,它并没有#9;事实证明,他们的应用程序生成的内容并不是同一个命令行。
您还应该从Ghostscript中捕获stdout和stderr(如果没有别的东西可以将它们重定向到文件)。毫无疑问,Ghostscript会打印有关该问题的更多信息,而您只是将其丢弃。