2012-06-11 2 views
1

우리의 cgi 중 하나에서 Ghostscript를 호출하여 PDF 파일을 PNG 이미지로 변환해야합니다. 이 CGI는 요청의 인코딩 된 PDF 스트림은 다음Ghostscript에 CGI 요청을 사용하는 방법

 
my $PDF_ENCODED = $q->param('PDF_ENCODED'); 
my $PDF_DECODED = decode_base64($PDF_ENCODED); 

처럼, 그것을 디코딩 가지고 있으며 '의 GS'명령을 호출하여 디스크에 PNG 이미지를 생성합니다.

제 문제는 gs 명령 줄에 $ PDF_DECODED를 파이프하는 법을 모르겠습니다. 시도했습니다.

 
system("$PDF_DECODED | gs -dNOPAUSE -q -r300 -sDEVICE=png16m -dBATCH -sOutputFile=/tmp/ghostscript/new-test.png-") 

그러나 작동하지 않습니다.

감사합니다.

감사합니다. golimar 및 simbabque. 그것은과 협력 파일로 대신 데이터를 기록, 그들은 파일 인 것처럼 프로세스를 열고, 당신은 "파일"을 쓸 때 처리 할 수있는 펄

 
$SIG{PIPE} = 'IGNORE'; 
open(FH, "| gs -dNOPAUSE -q -r300 -sDEVICE=png16m -dBATCH -sOutputFile=/tmp/ghostscript/new-test.png -") or die "can't fork: $!"; 
print FH "$PDF_DECODED\n" or die "can't write: $!"; 
close FH   or die "can't close: status=$?"; 
+1

Ghostscript 라이브러리에 대한 API가 있습니다 : http://p3rl.org/GSAPI,'gs' 바이너리로 포팅하는 것보다 약간 효율적이고 약간 오류가 있습니다. – daxim

+0

고스트 스크립트 라이브러리를 이용해 주셔서 감사합니다. – user200340

답변

0

, 당신은 프로세스 배관 데이터입니다 , Using open() for IPC in perlipc을 참조하십시오.

+0

User200340 :'system' 호출이 명령 행에서 여러분의 pdf 파일 인 바이너리를 좋아하지 않기 때문에 golimar가 말하는 것을해야합니다. 이 솔루션을 사용하면 먼저 파일에 저장하는 추가 단계를 생략 할 수 있습니다. – simbabque

+0

고마워, 지금 일하고있다. – user200340