Распечатать PDF-документ с помощью модуля Win32print Python?

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

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

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

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


person slypete    schedule 22.09.2009    source источник


Ответы (3)


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

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

person slypete    schedule 23.09.2009
comment
Вы можете сделать это таким образом или иметь вывод Ghostscript на любой язык, который вам нужен, который поддерживает принтер, например PCL / Postscript. Преимущество заключается в том, что вы можете затем открыть выходной файл и вставить команды для выбора лотка и т. Д., Если это необходимо. - person Douglas Anderson; 30.09.2009
comment
Если вы выберете более старую версию Ghostscript, например 7.06 / 7.07, я считаю, что они лицензированы под GNU, поэтому это может решить вашу проблему лицензирования. - person Douglas Anderson; 30.09.2009
comment
GPL не обязательно является недостатком. ;) - person Georg Schölly; 24.02.2010
comment
Я знаю, что этот пост очень старый, но как я могу вызвать gsprint.exe с фактическим Ghostscript 9.15, я не могу найти exe с таким именем, я не знаю, как использовать gswin32.exe, который является приложением Ghostscript. - person Alex Lord Mordor; 28.11.2014
comment
Вам необходимо установить gsview. gsprint входит в состав gsview 3.4 и более поздних версий. После установки gsview файл gsprint.exe должен находиться в том же каталоге, что и исполняемый файл gsview. - person slypete; 02.12.2014

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

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

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

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

person Craig Smith    schedule 19.07.2010

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

person John Paulett    schedule 22.09.2009
comment
Я уже использую ReportLab для создания PDF-файла. Теперь его нужно распечатать. - person slypete; 23.09.2009