2011-11-22 128 views
0

我应该打印一个本地pdf文件,如果打印机名被定义(一个正常的字符串),程序应该将文档发送到特定的打印机,否则它应该使用默认打印机。win32print和多台打印机

此代码的工作原理,但无论如何使用默认打印机!

global printer_name 
if printer_name: 
    print "printer",nome_stampante 
else: 
    nome_stampante = win32print.GetDefaultPrinter() 
    print "default printer" 

out = '/d:"%s"' % nome_stampante 

win32api.ShellExecute (
    0, 
    "print", 
    filename, 
    out, 
    ".", 
    0 
) 

错误在哪里?

千恩万谢

+0

感谢,printto可以作为除外:) – Infrid

回答

2

代码中使用全局变量,没有人知道在哪里printer_name设置,什么是nome_stampante。我建议您使用将使用选定的打印机打印文件的功能。这可以是这样的:

import win32api 
import win32print 

def win_print(filename, printer_name = None): 
    if not printer_name: 
     printer_name = win32print.GetDefaultPrinter() 
    out = '/d:"%s"' % (printer_name) 
    win32api.ShellExecute(0, "print", filename, out, ".", 0) 


def test_print(): 
    win_print('test.txt') 
    win_print('test.txt', 'PDFCreator') 


if __name__ == '__main__': 
    test_print() 
+0

这对我的作品 - 试验程序产生2个PDF文件。至于在我的注册表中的打印命令,我有:'%SystemRoot%\ system32 \ NOTEPAD.EXE/p%1' –

+0

是的,PDFCreator也是我的默认打印机:) –

+0

对不起,nome_stampante是意大利语中的“printer_name”。无论如何,我改变了动词,现在它起作用了 – Infrid