Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
libXp(3Xp)		       XPRINT FUNCTIONS			    libXp(3Xp)

       libXp - X Print Client Library

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

       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 con-
       tain 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

       The  Print  Context  affects  how the DDX driver	generates its page de-
       scription 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  pro-
       cesses.	Applications can enlist	the help of secondary processes	to ma-
       nipulate	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

       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>

	   Display *pdpy;
	   Screen *pscreen;
	   Window pwin;
	   XPPrinterList plist;
	   XPContext pcontext;
	   int plistCnt;
	   char	*attrPool;
       #define NPOOLTYPES 5
	   XPAttributes	poolType[NPOOLTYPES] = {XPJobAttr,XPDocAttr,XPPageAttr,
	   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 );

	    * 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,
	   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 );

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

       X Print Service Extension Library

X Version 11			  libXp	1.0.3			    libXp(3Xp)


Want to link to this manual page? Use this URL:

home | help