On 02/16/2015 09:08 PM, ken.hes...@gmail.com wrote:
Would seem to be a simple problem.  I just want to print to my printer instead 
of the console using Python 2.7, Windows 7.  Hours of looking through FAQ's and 
Google haven't yielded a solution.  Any suggestions appreciated --


It is a simple problem. All you have to do is send the correct bytes to a file object that will transfer those bytes to the printer. It's been a long time since I used Windows, but if I recall, you just open the device "prn" or maybe "lpt1" and go.

For example, to print "Hello world" to an Epson MX80, on a local parallel port, you'd do

outfile = open("lpt1", "wb")
print >> outfile, "Hello world"

(To be polite, you should use "\\dev\\lpt1", but I don't know whether the simpler form has ever been deprecated by Windows)

Unfortunately, printers have gotten increasingly complicated since the days of the MX80. For example on a HP laser printer, it won't start rendering till you send a hex "0c" to it (also known as a formfeed). You also may need to control fonts, sizes, justifications, etc., and that varies by printer model. Some printers want Postscript. So you are no longer talking to a printer device, but to a complex printer driver.

I'm afraid when I want to print something for the last decade or so, I just create some form of document, and use the corresponding program to print it for me. For simple text, I put it in a simple text file, fire up emacs, and tell it to print.

If you've managed to get the equivalent of a "print-to-file" output for your particular printer, then you can print it by just copying the bytes in that file to the "prn" or "lpt1" device.

Depending on the data type you're trying to print, you may be able to control the external program from within Python. For example, if you're trying to print a pdf file, I got the following fragment from a google search:

import win32api
fname="C:\\somePDF.pdf"
win32api.ShellExecute(0, "print", fname, None,  ".",  0)


In this fragment, you're asking the registered pdf viewer to print it for you. (presumably Acrobat reader or the equivalent)

If you've got a Postscript printer, perhaps the following link will help, to print using PIL:
   http://effbot.org/imagingbook/introduction.htm


The conventional way to print to an arbitrary printer, assuming it's already installed to your OS, is to use one of the GUI libraries. If your program is already GUI, then this is the way to go. For example, see tkinter, wxpython, qt, ...

In this last case, the drivers and libraries abstract out the particular kind of printer, but you need a lot more software to use it.



--
DaveA
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to