2014-02-12 2 views
0

저는 파이썬과 GhostScript를 사용하여 프로젝트를 진행하고 있습니다. 현재 저는 수 백 페이지의 PDF 파일을 가지고 있는데,이 PDF를 가져 와서 TIF 파일로 페이지를 분리해야합니다. 코드를 작성하고 올바르게 실행해야합니다. 그러나이 프로그램은 완료하는 데 약간의 시간이 걸릴 수 있습니다. 프로세스에서 얼마나 멀리 있는지 사용자에게 출력합니다.GhostScript 백분율 완료

gs_appdir = 'C:\\Program Files\\gs\\gs9.10\\bin\\' 
os.chdir(gs_appdir) 
args = "-o \""+wkgdir+"Images\\Image_%03d.tif\" -sDEVICE=tiffg4 -q -NODISPLAY -r200x200 -s \""+inPDFFile+"\"" 
os.system("gswin64c.exe %s" % args) 

내가 인수 밖으로 -q 매개 변수를 사용하는 경우는, 그러나 그것은 라인으로 라인으로 라인을 이동합니다, 저를 표시합니다 :

페이지 XXXX의 1
페이지 2 XXXX
페이지 xxxx 3 of 3 xxxx
... 등

나는이 비슷한 일을하고 싶습니다 : 그것은 그러나 내가이 사용 고스트 스크립트를 수행하는 방법을 아주 확실하지 않다, 같은 줄에 비율을 인쇄합니다

print "\r[ Preparing Images ] %s%%" % ((img+1)*100/imgcount), 

. 모든 조언은 크게 appriciated 것입니다.

답변

0

흠 나는 기본적으로 이것을 할 수 없다고 생각합니다. PostScript 프로그래밍 덩어리를 사용하면 전달하려는 양식의 메시지를 얻을 수 있지만 stdout에있게되므로 -q로 실행하면 표시되지 않습니다.

PDF 파일을 열고 PDF 해석을 시작하고 페이지 수를 계산 한 다음 각 페이지를 렌더링하고 메시지를 보내는 루프를 입력하려면 Ghostscript 확장자를 사용하여 시작해야합니다. 모든 것을 끝내면 계속됩니다. 일반적으로 Ghostscript의 편리한 루틴이이 모든 것을 처리하지만 원하는 메시지를 내 보내지는 않습니다.

같은 줄에 모두 내 보낸 경우에도 나는 그것을 좋아할 것이라고 생각하지 않습니다. 당신은 다음 라인이 단순히 이전 라인을 지우고 그 라인을 지우고 있다고 생각하는 것 같습니다. 그것은 생각하지 않습니다. 비록 그것이 명령 쉘 (그리고 운영 시스템)에 의존하기는하지만, 당신이 사용하고 있습니다. 나는 당신이 Windows를 사용하는 것 같아요, 당신은이 효과를 얻을 수 있을지도 모르겠지만 \ r 확실하지 않습니다.

기본적으로 Ghostscript를 외부 프로세스로 실행하지 않고 API를 사용하는 새로운 애플리케이션을 작성하고 stdout 콜백을 직접 처리해야합니다.

+0

그건 내가 두려워했던 것입니다. 제 사용자는 1-2 분 기다리기 만 받아 들여야한다고 생각합니다 (아마 그들에게 사전 메시지를 보낼 것입니다). \ r까지, 당신이 옳다면, 모든 것이 받아 들일 수는 없지만,이 특별한 설정의 경우에는 효과가 있습니다. – user3232819

+0

@ user3232819 : 접근 방식을 변경하면됩니다. 프로세스가 실행되는 동안 프로세스 출력을 얻을 수 있으며 프로세스가 완료 될 때까지 기다릴 필요가 없습니다. 이것 좀보세요 : http://stackoverflow.com/questions/16557908/getting-output-of-a-process-at-runtime // Ghostscript를 제안 된 방식으로 호출하면 라인 단위로 얻을 수 있습니다 페이지가 처리되는 동안 Ghostscript의 출력. 나는 .NET에서 비슷한 일을했다. 한 줄씩 출력 할 때 각 줄을 구문 분석하여 '현재 페이지'를 '전체 페이지'와 함께 내보내고 진행 값을 계산합니다. – HABJAN