Print PDF document with python's win32print module?

杀马特。学长 韩版系。学妹 提交于 2019-11-27 20:57:35

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

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.

I am not sure how to specifically get win32print to work, but there might be a couple of other options. Reportlab if often mentioned when creating PDFs from Python. If you are already invested in your approach, maybe using PyX or pypsg to generate the Postscript files and then feeding that into win32print would work.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!