What is the simplest way (in python) to print to a remote IPP/CUPS server or printer?

6.8k Views Asked by At

I have a postscript file and want it to be printed on a IPP capable device (or CUPS server). What is the minimal code and dependencies I could get away with to do that.

Using LPR or libcups gives me lot of cross-plattform dependencies. So my first approach was to implement a minimal subset of IPP (the protocol used by cups and many modern printers) since "it's only extended HTTP". But unfortuntely a IPP client is a lot more code than a few lines and so far I found no IPP client implementation meant for just printing and not managing a printserver.

I would prefer a solution in Python, but would also be happy with something in an oter dynamic language.

3

There are 3 best solutions below

0
On

pycups is an excellent tool; here is an example of some code that uses it - including setting some options like fit-to-page https://sourceforge.net/p/coils/coils-code/ci/master/tree/coils/logic/workflow/actions/doc/ipp_print.py#l58

There is also code floating around for using the LPR protocol. https://sourceforge.net/p/coils/coils-code/ci/master/tree/coils/logic/workflow/actions/doc/lpr_print.py

Communicating directly with the print server is much better than wrapping a platform dependent command line tool.

2
On

you need to add remote printer to CUPS:

lpadmin -p printername -E -v //IPADDRESS/spool -m driver.ppd

where driver.ppd is the driver to print with

ps: this could also work for programatic access, if printer is set before.

0
On

There's a python wrapper for CUPS ipptool available at github:

This python lib looks also promising:

You might also want to check this answer.