win32print и несколько принтеров - PullRequest
0 голосов
/ 22 ноября 2011

Я должен напечатать локальный файл PDF, если определено имя_принтера (обычная строка), программа должна отправить документ на определенный принтер, в противном случае следует использовать принтер по умолчанию.

Этот код работает, но используетпринтер по умолчанию в любом случае!

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
)

Где ошибка?

большое спасибо

1 Ответ

2 голосов
/ 22 ноября 2011

Ваш код использует глобальные переменные, и никто не знает, где установлено 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()
...