manpagez: man pages & more
man libXp(3)
Home | html | info | man
libXp(3Xp)                      XPRINT FUNCTIONS                      libXp(3Xp)




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 capabilities, 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.4                        libXp(3Xp)

xorg-libXp 1.0.4 - Generated Sat Oct 1 06:06:58 CDT 2022
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.