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