The OpenPrinting PAPI project contains an implementation of the FSG OpenPrinting PAPI. The API provides a print service/protocol independent interface for accessing printing support on a local host or network. This implementation includes support for v1.0 of the specification with the following major components:
* Core PAPI attribute support (libpapi-common.so)
* A PAPI library with dynamic backend support (libpapi.so)
* PAPI support on top of lpd/bsd/rfc-1179 protocol (psm-lpd.so)
* PAPI support on top of IPP (psm-ipp.so/libipp-core.so)
* BSD/SYSV command implementations on top of the PAPI interface
lpr(1b), lpq(1b), lprm(1b), lpc(1b)
lp(1), lpstat(1), cancel(1)
lpmove(1m), accept(1m), reject(1m), enable(1m), disable(1m)
* lpd/bsd/rfc-1179 protocol listening support (in.lpd)
* IPP protocol listening support under Apache 1.X and 2.X
(mod_ipp.so/libipp-listener.so)... read more
The most current version of the PAPI specification is now available as part of the CVS repository. The specification now
lives under CVS at papi/docs/PAPI-Specification-*.sxw. For your convenience, a PDF version of the file has also been checked into CVS. As the specification evolves, so will the copy in CVS.
I have added IPP client support to the mix. The IPP client support is not yet complete, but is well on it's way. Currently, the
support includes a number of PAPI/IPP operations, however multiple document job submission is broken. There is a problem in the code that sends the document data after the core protocol request. At any rate, this support is able to print single document jobs via print-job. I have used it to talk to the following IPP servers:
Solaris with Apache/mod_ipp
Linux with CUPS
HP IPP enabled JetDirect interface
Minolta-QMS Magicolor 2300DL w/IPP
I suspect that it works with others, but I don't happen to
have them available at this time. The obvious big one to
test real soon is a reasonably current Windows IPP print
In the process of reorganizing the tree, I have included the Apache IPP listener support on top of the PAPI. This was actually developed over a year ago, but has somehow never made it's way back into the source base. For those interested, the support is implemented as a set of libraries and Apache module. The libraries include support for on-the-wire protocol handling, and IPP operations dispatching and handling. The Apache module glues the dispatcher in under Apache and handles Apache configuration.
The mod_ipp code is designed so that it will work under either Apache 1.X or Apache 2.X. At compile time, you point it to the version of Apache that you want to run under and it builds the appropriate glue.
The PAPI source base has been reorganized to facilitate better code sharing between print server (protocol) support modules. This reorganization takes the attribute interface, list and uri support and places it in a common directory so that the Dynamic PAPI library, LPD(rfc-1179) module, and others can share it without multiple delivery. This should make building and supporting considerably easier.