2014-02-12 69 views
0

我有一個項目,我正在使用Python和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
頁的

頁XXXX 1
第2頁3 of xxxx
... et c。

我願做類似這樣:

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

凡將打印在同一行的百分比,但是我不太清楚如何做到這一點使用GhostScript的。任何建議將大大appriciated。

回答

0

嗯我基本上認爲你不能這樣做。使用PostScript程序塊時,你可以得到一個你想要的表單的消息,但它會在stdout上,所以如果你使用-q運行,那麼它將被抑制。

您必須先使用4個Ghostscript擴展來打開PDF文件,開始PDF解釋,計算頁數,然後輸入循環呈現每個頁面併發出消息。隨後關閉一切。通常情況下,Ghostscript中的便利程序會爲您處理所有這些問題,但它們不會發出您想要的那種消息。

即使它全部發射在同一條線上,我不認爲你會喜歡它。你似乎認爲後面的行會簡單地擦除(寫在上面的)之前的行,並且我不這麼認爲,儘管它取決於命令shell(並且因此取決於操作系統)您正在使用。我注意到你似乎在使用Windows,你可以用\ r我不確定這個效果。

基本上,如果你想這樣做,你將不得不編寫一個使用API​​的新應用程序,而不是執行Ghostscript作爲外部進程,並自己處理stdout回調。

+0

這幾乎是我所害怕的。我認爲我的用戶將不得不接受1-2分鐘的等待時間(可能會爲他們預先留言)。 只要\ r,你是正確的,並不是所有人都會接受,但是對於這個特殊的設置它正在工作。 – user3232819

+0

@ user3232819:你只需要改變你的方法。您可以在進程運行時獲取進程輸出,而無需等待進程完成任務。看看這個:http://stackoverflow.com/questions/16557908/getting-output-of-a-process-at-runtime //如果你以建議的方式調用Ghostscript,你將可以逐行獲取在處理頁面時從Ghostscript輸出。我在.NET中做了類似的事情,它可以工作。當您逐行輸出時,請解析每一行以獲取「當前頁面」以及「總頁數」並計算您的進度值。 – HABJAN