Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Print PDF document with python's win32print module?

I'm trying to print a PDF document with the win32print module. Apparently this module can only accept PCL or raw text. Is that correct?

If so, is there a module available to convert a PDF document into PCL?

I contemplated using ShellExecute; however, this is not an option since it only allows printing to the default printer. I need to print to a variety of printers on servers across various networks.

Thanks for your help, Pete

like image 775
slypete Avatar asked Dec 13 '22 02:12

slypete


2 Answers

I ended up using Ghostscript to accomplish this task. There is a command line tool that relies on Ghostscript called gsprint.

You don't even need Acrobat installed to print PDFs in this fashion which is quite nice.

Here is an example:

on the command line:

gsprint -printer \\server\printer "test.pdf"

from python:

win32api.ShellExecute(0, 'open', 'gsprint.exe', '-printer "\\\\' + self.server + '\\' + self.printer_name + '" ' + file, '.', 0)

Note that I've added to my PATH variable in these examples, so I don't have to include the entire path when calling the executable.

There is one downside, however. The code is licensed under the GPL, so it's no very useful in commercial software.

Hope this helps someone, Pete

like image 68
slypete Avatar answered Dec 22 '22 05:12

slypete


I was already using the win32api.ShellExecute approach and needed to print to a non-default printer. The best way I could work out was to temporarily change the default printer. So right before I do the print I store what the current default printer is, change it, and then set it back after printing. Something like:

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

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

I'm not going to claim it's pretty, but it worked and it allowed me to leave my other code untouched.

like image 39
Craig Smith Avatar answered Dec 22 '22 05:12

Craig Smith