2012-08-22 5 views
1

나는이 문제를 해결할 수있는 사람이 있기를 바랍니다.nodejs 'spawn 및 exec pdf2swf 사용

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 파일에 데이터를 작성하려고 할 때 : 간부를 사용

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". 

이 프로세스가 성공적으로 확정

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"에서 재귀 chmod 777을 실행합니다.

+0

'setsid'는'spawn'에 대한 유효한 옵션이 나타나지 않는다. – ebohlman

+0

죄송합니다. setsid가 여전히 유효한 옵션 인 노드 0.6.18을 사용하고 있다는 것을 잊어 버렸습니다. – nnikpour

답변

3

이 (... 그것에 대해 생각하지 않는다 수단에) 결코 ... 그것을 자신을 해결 스폰 프로세스에 인수에 공백을 접견. 그 사이에 공백을 사용할 수있는 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']); 
+0

또한 빈 문자열을 제공하지 마십시오! 제 3 자 npm 모듈이 작동하지 않는 이유를 알아 내려고 벽에서 머리를 세게 치고있었습니다. 배열에서 삼자 연산자가 제공 되었기 때문에 유지 보수자가 기본값에서 옵션을 변경하지 않고 코드를 테스트하지 않았다고 생각합니다. 옵션이 기본값이 아닌 경우 빈 문자열. – JaredMcAteer