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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам