Распечатать PDF документ с помощью модуля py32 win32print? - PullRequest
2 голосов
/ 23 сентября 2009

Я пытаюсь распечатать документ PDF с модулем win32print. По-видимому, этот модуль может принимать только PCL или необработанный текст. Это верно?

Если это так, есть ли модуль для преобразования PDF-документа в PCL?

Я предполагал использовать ShellExecute; однако, это не вариант, так как он позволяет только печать на принтере по умолчанию. Мне нужно печатать на разных принтерах на серверах в разных сетях.

Спасибо за вашу помощь, Пит

Ответы [ 3 ]

9 голосов
/ 23 сентября 2009

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

Надеюсь, это кому-нибудь поможет, Пит

3 голосов
/ 20 июля 2010

Я уже использовал подход win32api.ShellExecute и мне нужно было печатать на принтере не по умолчанию. Лучший способ, которым я мог работать, - это временно сменить принтер по умолчанию. Поэтому непосредственно перед печатью я сохраняю текущий принтер по умолчанию, меняю его и затем устанавливаю обратно после печати. Что-то вроде:

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

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

Я не собираюсь утверждать, что это красиво, но это сработало, и это позволило мне не трогать другой мой код.

0 голосов
/ 23 сентября 2009

Я не уверен, как конкретно заставить работать win32print, но может быть несколько других вариантов. Reportlab , если часто упоминается при создании PDF-файлов из Python. Если вы уже вложили средства в свой подход, возможно, используйте PyX или pypsg для генерации файлов Postscript, а затем добавьте их в win32print.

...