2012-09-10 1 views
1

내 문제는 다음과 같습니다. ghostscript를 사용하여 일부 pdfs를 jpeg 파일로 변환 한 다음 실버 라이트 컨트롤로 렌더링합니다. 나는 사용하여 pdf 파일 변환 오전 :Ghostscript가 서버를 크래킹합니다.

public void PdfToJpg(string ghostScriptPath, string input, string output) { 
      timer1.Enabled = true; 
      //if the pdf has more than 1 file (ex. 3) then 3 jpeg files will be outputed 
      String ars = "-dNOPAUSE -sDEVICE=jpeg -r300 -o" + output + "-%d.jpeg " + input; 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      startInfo.Arguments = ars; 
      startInfo.FileName = ghostScriptPath; 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden;    
      using (Process exeProcess = Process.Start(startInfo)) { 
       exeProcess.WaitForExit(); 
      }   
     } 

이 다음 세션에서 페이지 번호와 사전에 페이지 바이트 [], 사전을 저장하고 실버 활성화 된 서비스를 전송하고, aspx 페이지로 전송을 그 Silverlight 컨트롤 (Response.redirect (page.aspx) 포함)이 포함되어 있습니다. 모든 것이 잘 작동하지만 때로는 서버 (Cassini 또는 IIS)가 충돌합니다. 즉, 파일이 변환되지만 리디렉션이 발생하지 않습니다. 단순히 페이지가 로딩 상태로 유지됩니다. "최종 프로세스"를 사용하여 cassini를 닫거나 IIS 서버를 다시 시작해야 프로세스가 다시 작동합니다. 나는 비슷한 문제가 서비스와 함께 있다고 생각하지 않는다. 왜냐하면 나는 실버 라이트 애플리케이션에 바이트 단위의 오디오 파일을 보내고 모든 것이 제대로 작동하기 때문에 서버가 멈추지 않을 것이므로 고스트 스크립트 때문이라고 생각한다. ., 누군가가 혹평 아이디어. 또한 내가 elmah를 사용하고 오류가보고됩니다 ... 그리고 때 디버그에서 내가 클릭 이벤트를 입력하지 않는 프로세스의 다른 부분을 포함하는보기 버튼을 클릭하지만 변환이 완료됩니다 (아닌 리디렉션), 나는 그것이 가능한 방법을 모른다. .., 고마워. 난 내 코드를 변경 : 다음 인 UseShellExecute와 redirectoutput 서버가 가끔 '야생'을 진행하고 그렇지 않은 경우 주석 경우

 using (Process convertProc = new Process()) { 
       convertProc.StartInfo.FileName = ghostScriptPath; 
       convertProc.StartInfo.Arguments = args; 
       //convertProc.StartInfo.UseShellExecute = false; 
       //convertProc.StartInfo.RedirectStandardOutput = true; 
       convertProc.StartInfo.CreateNoWindow = true; 
       convertProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
       convertProc.Start(); 
       ThreadedKill(convertProc.Id); 
       convertProc.PriorityClass = ProcessPriorityClass.Normal; 
       convertProc.WaitForExit(); 
       } 

하고, 코드가 완벽하게 실행되도록 확실히

가 UPDATE 고스트 스크립트와 뭔가 매번,하지만 고스트 스크립트 프로세스에서 창문이 나타납니다, 나는 그것을 원하지 않아요. 나타나지 않게하려면이 줄을 주석 처리하거나 useshellexecute를 true로 설정하고 때때로 redirectoutput을 주석 처리해야합니다. 내가 무엇을 할 수 있을지? 는 콘솔 응용 프로그램에 대한 gswin64c.exe 내 gswin64.exe을 변경하고 지금 창 난 ISN에 대해 얘기했다 : 어떤 redirectStandardOutput이며, 무엇을 만드는 ...,

UPDATE 2 ... MSDN에 이해 dind't 더 이상 보이지 않습니다. 어떤 코드는 -o-dBATCH-dNOPAUSE을 의미하기 때문에 당신이 -dNOPAUSE 필요하지 않습니다,

+0

이 문제를 해결하려면 오류에 대한 자세한 정보 (예 : 스택 추적 또는 적어도 Windows 오류 코드가있는 예외. 이벤트 로그에 기록되는 내용은 무엇입니까? –

+0

이 문제는 예외이며 이벤트 뷰어에는 오류가 없습니다. TaskManager에서 정지가 발생할 때 gswin64.exe가 실행되고 있지 않습니다. – adi1989

+0

GPL Ghostscript 9.06 (2012-08-08) gswin64.exe – adi1989

답변

1

먼저 .. 적어도 아직 ... 미쳤 없지만 그것은 다치게하지 않습니다.

이 문제는 '간헐적으로 발생합니까?' 또는 서버가 멈추는 파일을 반복적으로 보내면 : 매번 또는 특정 파일에 더 자주 멈 춥니 까?

정말 간헐적 인 경우 Ghostscript가 아닌 것 같습니다.

은 고스트 스크립트 불평 경우 -sstdout=___.out-sstderr=___.err (가)보고 추가 할 수 있습니다, 파일로 고스트 스크립트에서 표준 출력표준 에러을 캡처합니다. 동일한 파일을 항상 작성하는 경우 gswin * .exe에서 생성 된 메시지가 있으면 오류가 발생한 이후의 내용이 표시됩니다.

-Z:을 추가하면 일부 타이밍 정보가 Ghostscript 출력에도 추가됩니다.

주 당신이 JPEG 출력을위한 -r300을 사용하고 있기 때문에 : 고스트가 예기치 않게 중지되는 경우, 로 시작하고 .tmp 확장자를 가지고있는 TEMP 디렉토리에 두 개의 파일이있을 것입니다. 이들은 밴딩에 사용되는 디스크 기반 'clist'파일 용으로 작성됩니다 (300dpi 레터 크기 페이지는 기본값 -dMaxBitmap=____ 값 8m를 초과 할만큼 충분히 큽니다).

TEMP 폴더에 te_XXXXX.tmp 개의 파일이 누적되지 않으면 Ghostscript가 충돌하지 않는 것입니다.

+0

TEMP 디렉토리에 'te _'.tmp 파일이 없습니다 ... 내가 보내는 파일, 정지 할 때 이후에 보내는 모든 파일은 중요하지 않습니다. 작동하지 않는다면 jpeg 파일로 변환되지만 코드 비헤이비어의 나머지 코드는 실행되지 않습니다. 그리고 그 명령은 어떻게되어야합니까? : -sstdout = file.out -sstderr = file2.err -sDEVICE = .jpr -o300 -o "+ output +"- % d.jpeg "+ 입력; 여기서 .err 및 .out 파일은? 그 (것)들을 어디에서든지 찾아 내 거든, 또는 gs가 과실을 일으키기 때문에? 지금, 나는 gs에 의해 전혀 변형시키지 않는 pdf 파일을 찾아 냈다. – adi1989