2012-09-27 114 views
4

我試圖使用win32api將PDF文檔輸出到特定的打印機。Python的win32api僅打印到默認打印機

win32api.ShellExecute(0, "print", filename, '/d:"%s"' % printername, ".", 0) 

filename是一個完整的路徑名的文件,printname是目標打印機我獲得通過的win32api.EnumPrinters(6)輸出去的名稱。

即使printername是另一個目標的名稱(我期望通過特定打印機將指定文件發送到該打印機,而不是默認值),該文件將發送到Windows默認打印機。

任何提示我做錯了什麼?是否有將PDF文件一般打印到特定打印機的不同方式?除了一切,有沒有辦法從我的程序暫時更改默認打印機?

+0

我發現它取決於文件類型...一個* .html將提示您選擇的打印機,一個* .pdf只是默認...沒有任何「解決方法」,我已經看到實際工作。 ..我們在一個由許多研究人員/農民使用的軟件包中使用它... –

+0

@JoranBeasley - Huh。你知道的任何其他方法,或者我是SOL,就你所知? – Inaimathi

+0

SOL我認爲...它變得更糟,它取決於您的默認PDF處理程序(PDFComplete根本不工作)...替代方法是在默認的PDF查看器中打開它並讓它們從那裏打印 –

回答

2

MikeHunter的回答是一個體面的起點。

建議的解決方案是呼叫Acrobat或Acrobat Reader進行實際打印,而不是通過win32api。對於我而言,這已經足夠:

from subprocess import call 

acrobat = "C:\Program Files\Adobe\Acrobat 7.0\Acrobat.exe" ## Acrobat reader would also work, apparently 
file = "C:\path\to\my\file.pdf" 
printer = "Printer Name Goes Here" 

call([acrobat, "/T", file, printer]) 

啓動了Acrobat和打印指定的文件,即使它不是Windows默認命名打印機。以這種方式處理的第一個打印作業需要幾秒鐘(我假設這是Acrobat服務正在啓動並緩存在內存中),後續作業立即打印。我還沒有做過任何類型的負載測試,但我認爲這個調用並不重要,所以不要相信它的巨大吞吐量。

0

嘗試從lpinner答案在此鏈接:http://forums.arcgis.com/threads/67064-Print-PDFs-with-Python

我試了一下,似乎工作得很好。

好運, 邁克

+4

只有鏈接的答案一般不鼓勵。請在您的回答中包含您所提交內容的相關部分的摘要。 – yms

+0

它的工作原理。我根據你的鏈接寫了一個答案。如果你總結這種方法而不是鏈接到它,我會接受你的。 – Inaimathi

+0

很高興它適合你Inaimathi。我沒有時間寫任何東西,但我想傳遞鏈接。感謝您撰寫摘要。 – MikeHunter

相關問題