Распечатать 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.