2009-09-22 619 views
2

我正在嘗試使用win32print模塊打印PDF文檔。顯然這個模塊只能接受PCL或原始文本。那是對的嗎?用python的win32print模塊打印PDF文檔?

如果有,是否有可用於將PDF文檔轉換爲PCL的模塊?

我打算使用ShellExecute;但是,這不是一個選項,因爲它只允許打印到默認打印機。我需要在各種網絡上的服務器上打印各種打印機。

感謝您的幫助, 皮特

回答

9

我最終使用Ghostscript來完成此任務。有一個命令行工具依賴於Ghostscript,名爲gsprint

你甚至不需要安裝Acrobat來以這種方式打印PDF文件,這非常好。

下面是一個例子:

在命令行上:

gsprint -printer \\server\printer "test.pdf" 

蟒蛇:

win32api.ShellExecute(0, 'open', 'gsprint.exe', '-printer "\\\\' + self.server + '\\' + self.printer_name + '" ' + file, '.', 0) 

請注意,我已經加入到我的PATH變量在這些例子中,所以調用可執行文件時,我不必包含整個路徑。

但是有一個缺點。該代碼在GPL下獲得許可,因此在商業軟件中沒有多大用處。

希望這可以幫助別人, 皮特

+2

你可以這樣做,或者讓Ghostscript輸出到打印機支持的任何lanugage,如PCL/Postscript。這樣做的好處是,您可以打開輸出文件並根據需要插入托盤選擇等命令。 – 2009-09-29 20:09:49

+0

如果您使用7.06/7.07等較舊版本的Ghostscript,我相信這些版本是在GNU下授權的,因此它可能會解決您的許可問題。 – 2009-09-29 20:11:10

+2

GPL不一定是缺點。 ;) – 2010-02-24 10:37:57

0

我不知道如何具體得到win32print工作,但也有可能是一對夫婦的其他選項。 Reportlab如果在從Python創建PDF時經常提到。如果您已經投資了您的方法,可能使用PyXpypsg生成Postscript文件,然後將其提供到win32print中即可。

+0

我已經在使用ReportLab創建PDF。現在需要打印。 – slypete 2009-09-22 23:51:03

3

我已經使用win32api.ShellExecute方式,並打印到非默認打印機需要。我能解決的最好辦法是臨時更改默認打印機。因此,在我進行打印之前,我會存儲當前的默認打印機,更改它,然後在打印後將其設置回來。喜歡的東西:

tempprinter = "\\\\server01\\printer01" 
currentprinter = win32print.GetDefaultPrinter() 

win32print.SetDefaultPrinter(tempprinter) 
win32api.ShellExecute(0, "print", filename, None, ".", 0) 
win32print.SetDefaultPrinter(currentprinter) 

我不會說這是漂亮,但它工作,它讓我離開我的其他代碼不變。