Provided by: libxp-dev_1.0.2-1ubuntu1_amd64 bug

NAME

       libXp - X Print Client Library

SYNOPSIS

       cc [ flag...  ] file...-lXp [ library...  ]
       #include <X11/extensions/Print.h>

DESCRIPTION

       libXp provides public APIs to allow client applications to render to non-display devices.

       When  an application wishes to print, it makes a display connection to the X print server and asks to see
       the list of printers available with an XpGetPrinterList() request. Once the application  has  selected  a
       printer, it creates and sets a print context using XpCreateContext() and XpSetContext().

       The  Print  Context  represents  the  embodiment of the printer selected. It is initialized by the Xprint
       server at XpCreateContext() time to contain a printer's default capabilities, as well as, the description
       of its overall capabilties, and to maintain the state of settings on the printer, the state of  rendering
       against the printer, and the rendered output.

       The  Print  Context  affects how the DDX driver generates its page description language (PDL) and how the
       PDL is submitted to a spooler. The print context may also affect fonts and  other  elements  in  the  dix
       layer  of  the  X Print Server. The print contexts can be shared among processes. Applications can enlist
       the help of secondary processes to manipulate print options in the Print context rather  than  taking  on
       the task directly.

       Once  an  application  has  set  options within the print context, it makes calls such as XpStartJob() to
       delineate jobs, documents, and pages within a sequence of normal X calls.

       A job is a collection of documents, where each document is in turn a collection of pages. When XpEndJob()
       is called, the resulting PDL is either sent to a print spooler or can be  retrieved  by  the  application
       itself.

       The developer basically has to make changes to the X application to make use of the X Print Service.

       A simple X application supplemented with some of the libXp routines might look like this:

       #include <X11/Xlib.h>
       #include <X11/extensions/Print.h>

       main()
       {
           Display *pdpy;
           Screen *pscreen;
           Window pwin;
           XPPrinterList plist;
           XPContext pcontext;
           int plistCnt;
           char *attrPool;
       #define NPOOLTYPES 5
           XPAttributes poolType[NPOOLTYPES] = {XPJobAttr,XPDocAttr,XPPageAttr,
                                 XPPrinterAttr,XPServerAttr};
           int i;
           unsigned short width, height;
           XRectangle rect;
           char *printServerName = ":1";
           char *mylaser = "varos";

           /*
            * connect to the X print server
            */
           pdpy = XOpenDisplay( printServerName );

           /*
            * see if the printer "mylaser" is available
            */

           plist =  XpGetPrinterList (pdpy, mylaser, &plistCnt );

           /*
            * Initialize a print context representing "mylaser"
            */

           pcontext = XpCreateContext( pdpy, plist[0].name );
           XpFreePrinterList( plist );

            /*
             * Possibly modify attributes in the print context
             */
           for(i=0;i < NPOOLTYPES;i++) {
            if(attrPool = XpGetAttributes( pdpy, pcontext, poolType[i] )) {
                /* twiddle attributes */
                /*
                  XpSetAttributes( pdpy, pcontext, poolType[i],
                                   attrPool, XPAttrMerge );
                */
                XFree(attrPool);
            }
           }

           /*
            * Set a print server, then start a print job against it
            */

           XpSetContext( pdpy, pcontext );
           XpStartJob( pdpy, XPSpool );

           /*
            * Generate the first page
            */

           pscreen = XpGetScreenOfContext( pdpy, pcontext );
           XpGetPageDimensions( pdpy, pcontext, &width, &height,
                       &rect);
           pwin = XCreateSimpleWindow( pdpy, RootWindowOfScreen( pscreen ),
                           rect.x, rect.y, rect.width, rect.height, 2,
                           BlackPixelOfScreen( pscreen),
                           WhitePixelOfScreen( pscreen));

           XpStartPage( pdpy, pwin );
           /* usual rendering stuff..... */
           XpEndPage( pdpy );

           XpStartPage( pdpy, pwin );
           /* some more rendering.....   */
           XpEndPage( pdpy );

           /*
            * End the print job - the final results are sent by the X print
            * server to the spooler sub system.
            */

           XpEndJob( pdpy );
           XpDestroyContext( pdpy, pcontext );
           XCloseDisplay( pdpy );
       }

SEE ALSO

       Xprt(1),       XpCreateContext(3Xp),      XpDestroyContext(3Xp),      XpEndJob(3Xp),      XpEndPage(3Xp),
       XpFreePrinterList(3Xp),    XpGetAttributes(3Xp),     XpGetPageDimensions(3Xp),     XpGetPrinterList(3Xp),
       XpSetAttributes(3Xp), XpSetContext(3Xp), XpStartJob(3Xp), XpStartPage(3Xp)

       X Print Service Extension Library

X Version 11                                       libXp 1.0.2                                        libXp(3Xp)