The Big Picture
The main priority of the project is be to provide a very advanced print
module for Unix/Linux which satisfies all the needs for international
printing (including languages and scripts like Arabic, Chinese, Cyrillic,
Greek, Hebrew, Indic (Devanagari, Tamil, etc.), Japanese, Korean, Polish,
etc.).
Additional goals are:
-
Automatic configuration and lookup of available local and
remote printers (which should work with all spooler systems on all
supported platforms - this includes CUPS,
LPRng, AIX, *BSD, HP-UX, Solaris,
etc.)
-
The print dialog should only offer values which are supported by the printer
(for example: only offer
DIN-A0 as paper size if the
printer only supports printing DIN-A0 - no more
DIN-A4 printouts on an A0 -only poster printer)
-
Provide support for localisation (l10n) and per-locale preferences
(for example
en_US (-like) locales get US-Lettter
and de_DE gets DIN-A4 as default paper size)
-
Support for printing MathML
-
Support for printing using TrueType and printer-builtin fonts
-
Support for printing with any fonts supported by the X11 subsystem
(e.g. TrueType, PS Type1, PCF, BDF, etc.)
-
Support for printing on printers which do not have the required
fonts installed (e.g. automated font download)
-
Support for non-PostScript output like PCL, PDF, platform-specific
or site-specific solutions
-
Provide support for very flexible, fine-grained central and/or
per-user configuration (e.g. per-user, per-machine, per-network,
per-locale etc.)
-
Provide enterprise features and support for large sites (companies,
universities etc.) which have to manage many many accounts
(>=80000 accounts should be no problem)
-
Allow easy maintaince of the code (Mozilla's Xprint module shares ~95% of
the source used by the main X11 toolkit, therefore most big changes to
this layer either applies directly or can be ported with minor effort
to the Xprint module)
-
Provide a full replacement (or alternative
:) ) for the
aging PostScript module
Status
Starting with Mozilla 0.9.8
the Xprint module is fully functional and ready for production usage;
starting with Mozilla 1.0.1
(BTW: Netscape 7.0
is based on Mozilla 1.0.1)
the last major features/bugfixes were completed (tracker bug for that work was
bug 149768).
Main focus is now to enhance Xprint's server side (see
xprint.mozdev.org) with new features
(due the design of Xprint new features added to the server side will
automagically "apply" to existing client binaries when they use the new server
version...)
Using Xprint for printing in Mozilla
Just print!
(this assumes the Xprint server side has been installed and started
(Linux users can get it from
xprint.mozdev.org) :)
(the usage page has more details... :)
Implementation
Xprint is separated into two parts:
-
the client side - this is Mozilla's Xprint module
The client side is mainly responsible as interface between the Xprint code
and the crossplatform print code in Mozilla.
The Xprint API is very similar to the core X11 protocol (actually the X11
protocol is being used plus a X11 extension to handle the differences
between a graphics card and a printer (for example: output on graphics
cards usually scrolls overflowing content while output on a printer uses
multiple pages instead)), therefore a large amount of source code (~95%)
can be shared between main toolkit's source and the Xprint code,
thus dramatically lowering the time required for maintaince or adding new
features.
This code layer is independent from the used flavor of OS and from the used
Xprint server version, therefore any version of the client side can run
with any version of the server side. The client does not have to know how the
destination (e.g. the printer) handles device-specific details, this is all
abstracted using the Xprint API and offloaded to the server side.
One huge advantage of this approach is that upgrading the server side
and adding new features (more drivers or new font support) works even
with old client binaries. And you can even mix different versions of
servers on different platforms at the same time (one client can use an
unlimited number of servers and one server can handle an unlimited
number of printers).
-
the server side - this is the Xprint server
(the binary is called "
Xprt ")
Xprint's server side - a daemon process (or many - as many you
want/need) - is where the output generation code
(e.g. PostScript, PCL, PDF etc.) and the platform-/driver-speficic
printer, spooler, font and configuration repository code resides.
However, this isn't mozilla.org code not mozilla-specific code (e.g. the
Xprint server side can be used from CDE/Motif/Qt/etc.-applications, too) -
http://xprint.mozdev.org/ has
more and better docs about these details... :-)
|