1

私は自分で問題を解決できないので、この問題を解決できる人がいることを願っています。

最新バージョンのpdf2swfをコンパイルしましたが、NodeJSで生成されたchild_processとして使用する場合を除いて、すべてが正常に機能しています。

execと同じコマンドを使用すると、再び機能します。いくつかのコード例を提供するには:

// 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');
});

child_processがファイルにデータを書き込もうとすると、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」全体で再帰的なchmod777を実行します。

挨拶

4

1 に答える 1

3

自分で解決しました...(それについて考えさえしないという意味で...)スポーンプロセスの引数にスペースを使用しないでください。間にスペースを使用できるparam=value引数がある場合は、他のすべての引数と一緒に配列にそれらを並べるだけです。

上記のspawnのソースコードは次のようになります。

var pdf2swf = cp.spawn('pdf2swf', [tmpPDFLocation, '-o',tmpSwfLocation,'-G','-vvv','-f','-T','9', '-t', '-j',quality,'-s','subpixels='+resolution,'-s','storeallcharacters', '-s','poly2bitmap']);
于 2012-08-24T11:20:14.290 に答える