nodejs的spawn和执行使用pdf2swf

我希望有人能够帮助解决这个问题,因为我自己没有得到。

我编译了最新版本的pdf2swf,除了当我想在NodeJS中使用它作为产生的child_process时,一切正常。

当我使用相同的命令作为一个执行,它再次工作。 提供一些代码示例:

// convert a pdf to swf using exec (works) var tmpSwfLocation = docsDir+'/Paper.pdf.swf'; var pdf2swf = cp.exec('pdf2swf '+tmpPDFLocation+' -o '+tmpSwfLocation+' -G -v -f -T 9 -t -j '+quality+' -s subpixels='+resolution+' -s storeallcharacters -s poly2bitmap', function(err, stdout, stderr){ console.log(stdout); console.log(stderr); var end = Date.now(); console.log('pdf2swf: SWF created in '+((end-start) /1000)+' seconds'); }); // convert a pdf to swf (does not work) var tmpSwfLocation = docsDir+'/Paper.pdf.swf'; var pdf2swf = cp.spawn('pdf2swf', ['-G','-v','-f','-T 9', '-t', '-j '+quality,'-s subpixels='+resolution,'-s storeallcharacters', '-s poly2bitmap',tmpPDFLocation, '-o '+tmpSwfLocation],{setsid:true}); pdf2swf.stdout.on('data',function(output){ console.log("pdf2swf:"+output) }); pdf2swf.stderr.on('data',function(output){ console.log("pdf2swf ERROR:"+output); }); pdf2swf.stdout.on('end', function(output){ var end = Date.now(); console.log('pdf2swf: SWF created in '+((end-start) /1000)+' seconds'); }); 

当spawn进程正在尝试将数据写入文件时,spawn进程将在最后中断:

 pdf2swf:NOTICE Writing SWF file /home/bitnami/flipdoc/ec2-instances/worker/pdf_test/test_directory/test-Testfile_31MB_26Pages.pdf_0/docs/Paper.pdf.swf pdf2swf:FATAL Could not create " /home/bitnami/flipdoc/ec2-instances/worker/pdf_test/test_directory/test-Testfile_31MB_26Pages.pdf_0/docs/Paper.pdf.swf". 

使用exec,进程成功完成

 pdf2swf:NOTICE Writing SWF file /home/bitnami/flipdoc/ec2-instances/worker/pdf_test/test_directory/test-Testfile_31MB_26Pages.pdf_0/docs/Paper.pdf.swf 

和一个存在的文件。

附加信息:在整个过程之前,我在整个“test_directory”上执行一个recursion的chmod 777。

电贺

解决它自己…永远不要(甚至不考虑它…)在spawn过程的参数中使用空格。 如果你有一个param = value参数,可以使用空格,只要将它们与其他参数一起排列在数组中。

现在来自上面的源代码看起来像这样:

 var pdf2swf = cp.spawn('pdf2swf', [tmpPDFLocation, '-o',tmpSwfLocation,'-G','-vvv','-f','-T','9', '-t', '-j',quality,'-s','subpixels='+resolution,'-s','storeallcharacters', '-s','poly2bitmap']);