Back to Printer Cartridge Articles
What is pcl3?
pcl3 is a ghostscript device driver for printers understanding Hewlett-Packard's Printer Command Language, level 3+ (PCL 3+, also called "PCL 3 Plus"). This applies in particular to some but not all HP DeskJet printers. The driver was therefore initially called "hpdj" but was renamed "pcl3" with version 3.0 in order to avoid raising expectations for non-PCL DeskJets.
Originally, the main design goals of this driver were maintainability, reliability, and support for "new" DeskJets, starting with the HP DeskJet 540. For version 3, I wanted to have in addition a substantial proportion of reusable software components.
Reliability is mainly achieved by strict adherence to HP's official documentation, as far as it can be obtained. Unfortunately, the information offered by Hewlett-Packard is not as up-to-date as I could wish. However, it seems that I have achieved my goal in this respect because since its first public release in March 1997 (hpdj 2.0) the driver has turned out to be able to support a gratifyingly large number of PCL-3 printer models beyond those for which it was originally written. In fact, although there have been cases where the driver did (or still does) not support some features relying on undocumented PCL-3 commands, in the region where a printer's capabilities intersect with the set of documented PCL-3 commands used by the driver, pcl3/hpdj has been successful out of the box in every single case I heard of. It now even supports some printers which claim to be PCL-3-conforming but aren't.
The code lists all the documentation used in order to enable everyone to evaluate the driver's quality.
Features
The main features of pcl3 are:
- Extensive end user documentation
- Support for various printer models. The driver has specific knowledge of a large number of HP DeskJets plus generic support for other PCL-3 printers. The distribution includes a command pcl3opts which is able to guess pcl3 invocation options from PCL files generated by other drivers.
- Several process colour models (Gray, RGB, CMY, CMY+K, and CMYK)
- Variable resolution
- Support for the hardware part of HP's Color Resolution Enhancement technology (C-REt)
- Variable print quality (draft, normal, presentation)
- Variable media type (plain paper, transparencies, etc.)
- Several methods for intensity rendering, including Floyd-Steinberg error diffusion
- Substantially better integration with PostScript's media handling than usual in almost all ghostscript drivers:
- recognition of media sizes from the document,
- adaptation to landscape orientation as required by the PostScript language definition,
- support for long-edge feed.
- The driver permits using the following functionality if supported by the printer:
- Input or output tray selection
- Banner printing (printing on continuous forms)
- Duplex printing
- Support for integration with spoolers (PPD files, filters for the Berkeley spooler and for CUPS)
- Page counting across invocations (useful to determine, e.g., ink costs per page)
pcl3 does not support different resolutions for black and CMY colorants, i.e., there is no combined 600 ppi black + 300 ppi CMY mode, and it does not support photo cartridges.
Supported Printers
pcl3 is in particular intended for the following printers:
HP DeskJet
HP DeskJet Plus
HP DeskJet Portable
HP DeskJet 310
HP DeskJet 320
HP DeskJet 340
HP DeskJet 400
HP DeskJet 500
HP DeskJet 500C
HP DeskJet 510
HP DeskJet 520
HP DeskJet 540
HP DeskJet 550C
HP DeskJet 560C
HP DeskJet 600
HP DeskJet 660C
HP DeskJet 670C
HP DeskJet 680C
HP DeskJet 690C
HP DeskJet 850C
HP DeskJet 855C
HP DeskJet 870C
HP DeskJet 890C
HP DeskJet 1120C
The current list of printer models for which pcl3 is known to work is:
HP 2000C
HP 2500CM
HP DeskJet 670C
HP DeskJet 697C
HP DeskJet 850C
HP DeskJet 940C
HP DeskJet 970C
HP DeskJet 1100C
Xerox DocuPrint M750
Xerox WorkCentre M940
Details on how to call pcl3 for these printers are contained in the file reports.txt. In addition, I have received informal statements that pcl3 can also be used with the following models:
HP DesignJet 500
HP DeskJet 340
HP OfficeJet T45
SHARP AJ-1800
SHARP AJ-1805
SHARP AJ-2000
SHARP AJ-2005
Xerox Docuprint 760
Previous (hpdj) versions were reported to work also with the following printers:
HP DeskJet 400 (tested for monochrome only)
HP DeskJet 420
HP DeskJet 500
HP DeskJet 500C (tested for monochrome only)
HP DeskJet 520
HP DeskJet 540
HP DeskJet 560C
HP DeskJet 600
HP DeskJet 610C
HP DeskJet 612C
HP DeskJet 660C/660Cse
HP DeskJet 672C
HP DeskJet 680C
HP DeskJet 690C
HP DeskJet 690C+
HP DeskJet 693C
HP DeskJet 694C
HP DeskJet 832C
HP DeskJet 855C
HP DeskJet 870Cse/870Cxi
HP DeskJet 880C
HP DeskJet 890C
HP DeskJet 895Cse/895Cxi
HP DeskJet 932C
HP DeskJet 1120C
HP OfficeJet 350
HP OfficeJet 590
HP OfficeJet 600
HP OfficeJet 625
HP OfficeJet G55
Lexmark 3000 Color Jetprinter
Olivetti JP792
It is extremely likely that pcl3 can also be used for these printers, but so far I have not received reports for them. My impression is even that every PCL-3-conforming printer can be made to print with pcl3 although not all of the printer's capabilities might be accessible.
If your printer is not contained in the lists above, you should also check the entry for pcl3 at LinuxPrinting.org. Howver, in my experience the information there is not always reliable.
You should be aware that Hewlett-Packard does not only produce PCL-3 ink jet printers. If the printer's documentation does not say anything about its printer command language and you find a statement like "... is designed for Microsoft Windows" or "DOS support through Windows only", the printer is almost certainly using HP's Printing Performance Architecture (PPA) commands and is intended exclusively for systems running Microsoft Windows. (These printers are sometimes erroneously called "GDI printers" because they are expected to be driven by a manufacturer-supplied driver via Windows' GDI interface.) HP does not release the PPA interface specifications. Nevertheless, it is possible to access at least a PPA printer's basic features with ghostscript; see for example http://sourceforge.net/projects/pnm2ppa.
Availability
pcl3 is free software, available under the terms of the GNU Lesser General Public License (LGPL), Version 2.1. The main location for pcl3 distributions is the directory http://Martin.Lottermoser.bei.t-online.de/pcl3dist. Look for files named pcl3-version.tar.gz.
I am distributing this driver only in the form of gzipped tar archives containing the source code. If you wish to compile pcl3, you need gzip, tar (on systems running Microsoft Windows you can use the Cygwin port of the GNU tools), and a command to convert text files from LF-terminated lines to whatever the line termination conventions are on your system. If you do not even have a C compiler, see the remarks below on precompiled ghostscript distributions.
Occasionally, I have been asked why this driver is not part of the main ghostscript distributions. That is a long story. I offered hpdj to L. Peter Deutsch twice, in September 1996 and in March 1997, but he declined on both occasions. The first time hpdj did not yet contain colour support (actually, he offered to pay me for implementing a fully usable DeskJet driver, but I in turn declined because I wished to distribute the driver immediately under a GNU license), and the second time he would have preferred an integration with the uniprint driver because there are already so many ink jet drivers. These considerations did, however, not stop him from including the make configuration for Uli Wortmann's new DeskJet driver in the official gs distribution shortly afterwards. This suggested that he had other reasons than those stated for not being interested in hpdj and I therefore gave up on this point. (Although he at least added a reference to hpdj in new-user.txt in gs 5.01, this was silently removed some time after 5.10 and before 5.50.)
In December 1999, triggered by hpdj users, L. Peter Deutsch in his turn approached me and asked whether I would consent to the driver being distributed under the AFPL. He was under the impression that hpdj is released under the GNU GPL whereas it is actually distributed under the terms of the GNU LGPL. Under the latter, it can be included in an AFPL ghostscript distribution without needing my explicit consent. Hence L. Peter Deutsch decided (still in December 1999) that he would include it in the future or at least add a reference to it in the documentation. Neither had happened when he passed the maintainership to Raph Levien in September 2000.
In October 2001, Raph Levien accidentally came across this web site and offered to include the driver in the ghostscript distribution. Again, there was a slight hitch: I was told that artofcode LLC was not particularly happy with a driver licensed under the GNU LGPL and would have preferred to distribute it under the AFPL. This in turn presented me with a problem: as the AFPL for ghostscript explicitly states that artofcode LLC holds the copyright for the program as a whole (see also the copyright notices in the source code of contributed drivers), my consent to distributing this driver under the AFPL would obviously imply that I've transferred certain rights to artofcode LLC. I therefore asked immediately which rights in my source code artofcode LLC would need and in particular which rights I would have to give up. This e-mail message was never answered, and there the matter rests.
I conclude from all this that the key property which has prevented pcl3 from being included in the main ghostscript distributions is it being licensed under the terms of the GNU LGPL. As long as no one is able to show me any argument why this is a bad thing for end users, I have no intention to change the license.
You will therefore usally have to fetch pcl3 separately and to recompile ghostscript. However, several free UNIX distributions (S.u.S.E. Linux, FreeBSD and Debian GNU/Linux) have been including hpdj in their ghostscript packages since 1997/1998, Red Hat Linux followed substantially later. Mandrake Linux was one of the first distributions to provide pcl3 version 3, but others have followed. Since July 2002, pcl3 is also contained in the ESP Ghostscript distribution. Note, by the way, that none of these organizations had any problems with hpdj/pcl3 using the GNU LGPL.
There is even good news for Microsoft Windows users: Denver Technology, Australia, having needed a Windows version of pcl3 in one of their projects, have generously made a package they built available for public download.
Disclaimer
I do not offer any guarantee that this driver is harmless for your printer, your cat's life, or the future of the universe. USE IT AT YOUR OWN RISK!
Bug List
You can find the current bug list for pcl3 here.
Alternatives
pcl3 is not the only ghostscript driver generating PCL 3.
Apparently the first implementation was George Cameron's cdj driver which was intended for most of the DeskJet 500 series printers. It is still contained in all ghostscript distributions. I started the development of hpdj in 1996 because I found cdj's functionality insufficient for the printer I had bought and its source code not sufficiently intelligible to be easily modified. This was reflected in hpdj's design goals.
Gunther Hess has written the uniprint driver which has been included in ghostscript distributions since version 4.70. It was intended to become a universal driver for ink jet printers and evolved from the cdj driver via the stcolor driver.
Uli Wortmann has modified the cdj driver for series-800 DeskJets. His cd8 driver became part of the main ghostscript distribution in gs 5.67, was removed in gs 6.22 from the AFPL distribution (because of its license), was again added to GNU ghostscript 6.51 but is no longer contained in GNU ghostscript 7.05.
At least two people have modified Uli's driver for other printers. The modification by Matthew Gelhaus (device cdj880) is available via www.gelhaus.net, the variant implemented by René Harsch for the DJ 970C can be found at www.harsch.net.
Apart from the driver by René Harsch which was apparently never known to the official developers, all the preceding drivers have been marked as deprecated in November 2002 (AFPL ghostscript 8.00) and will no longer be supported in the core distribution.
Newer implementations include the Gimp PCL driver and the driver from the HP Linux Inkjet Driver Project. The database at LinuxPrinting.org is a good starting point if you wish to search for drivers.
If you are unable to find a driver satisfying your requirements among these choices, you can of course always write a new one. This seems to have become increasingly popular in recent years but in my opinion it has not always been undertaken with a sufficient knowledge of professional software development, PostScript, ghostscript, or PCL: most source code is poorly documented, hardly anyone seems to have realized that ghostscript's driver API does not insulate the drivers completely from the demands of PostScript, and very few people give references to the PCL documentation used (which makes it difficult to determine which PCL dialect the printer must support). In looking at such drivers, one often gets the impression of being faced with an amateur effort undertaken for the fun of it and not because the authors recognized a gap to be filled. This agrees with the observation that most of these authors refer to hardly any other PCL-3 drivers in their documentation or source code; they do not seem to have looked for any.
However, don't get me wrong: it's perfectly in order to write a new driver just for the fun of it, even if it offers only functionality already implemented by existing drivers. But if you start publishing it for other people to use you have certain responsibilities concerning usability, reliability, documentation, and maintenance. This is sometimes ignored.
The pcl3 distribution contains a document discussing various issues you should consider if you wish to embark on writing a new ghostscript driver.
Copyright (C) 1997-2003 by Martin Lottermoser. Reprinted with permission. Author: Martin Lottermoser, Greifswaldstrasse 28, 38124 Braunschweig, Germany. For more infomation, Click Here
All Printer Cartridge Articles