libXp
Section: XPRINT FUNCTIONS (3Xp)
Updated: libXp 1.0.3
Index
Return to Main Contents
NAME
libXp - X Print Client Library
SYNOPSIS
cc
[
flag...
]
file...-lXp
[
library...
]
.nf
#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
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- SEE ALSO
-