GS-PCL3(1)                  General Commands Manual                 GS-PCL3(1)

       pcl3 — ghostscript device driver for printers understanding PCL 3+

       gs -sDEVICE=pcl3  [gs_option  | -dBlackLevels=integer  |
       -dCMYLevels=integer  | -sColorModel=model  | -sColourModel=model  |
       -dCompressionMethod=method  | -dConfigureEveryPage  | -dCUPSAccounting
       | -dCUPSMessages  | -dDepletion=depletion  | -dDryTime=seconds  |
       -sDuplexCapability=capability  | -sIntensityRendering=method  |
       -dLeadingEdge=edge  | -dManualFeed  | -sMediaConfigurationFile=pathname
       | -dMediaPosition=position  | -sMedium=medium  | -dOnlyCRD  |
       -sPageCountFile=pathname  | -sPCLInit1=string  | -sPCLInit2=string  |
       -sPJLJob=jobname  | -sPJLLanguage=language  | -sPrintQuality=quality  |
       -dRasterGraphicsQuality=quality  | -dSendBlackLast  | -dSendNULs=number
       | -dShingling=shingling  | -sSubdevice=subdevice  | -dTumble  |
       -dUseCard=value ]  ... [file ...]

   Supported Printers
       The ghostscript device driver pcl3 (formerly called hpdj) is a
       ghostscript backend for printers understanding Hewlett-Packard's
       Printer Command Language, level 3+ ("PCL 3+", also called "PCL 3
       Plus").  The driver is intended to support in particular the following
       printer models:

              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 PCL dialect called "PCL Level 3 enhanced" is apparently a not
       entirely compatible modification of PCL 3+.  This driver should
       basically work with such printers but you must be more careful which
       options you select and you might not be able to exploit all your
       printer's capabilities.

       The driver does not support printers understanding only Hewlett-
       Packard's PPA (Printing Performance Architecture) commands.  If a
       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 a PPA printer and hence is intended exclusively for systems
       running Microsoft Windows.  (These printers are also erroneously known
       as "GDI printers" because they are intended to be accessed through a
       manufacturer-supplied driver via Windows' GDI interface.)  There exist
       ways of using a PPA printer with ghostscript, but not through pcl3.

       Different printer models usually implement model-specific subsets of
       all PCL-3+ commands or arguments to commands.  You must therefore tell
       the driver by means of the Subdevice option for which model the
       generated PCL code is intended.  The model-dependent difference in the
       generated code is not great.  Apart from media specifications,
       resolutions and colour capabilities, one can consider three groups of
       models which are treated with significant differences:

              Group 1   DeskJet, DeskJet Plus, DeskJet 500

              Group 2   DeskJet Portable, DeskJets 3xx, 400, 5xx except 500
                        and 540,

              Group 3   DeskJets 540, 6xx, 8xx and 1120C.

       The first two groups I call the "old Deskjets", the third group
       consists of "new DeskJets".  If you have a PCL-3 printer not appearing
       in the list above, the likelihood is still good that it will accept the
       files generated by pcl3.  You can specify one of the supported
       subdevices in these cases (it is sufficient to try one each from the
       groups just mentioned), or use the special subdevice names unspecold or
       unspec which are treated like members of the second and the third group
       above, respectively, with all subdevice-dependent checks having been
       turned off.

       The list of printer models for which this driver is currently known to
       work is:

              HP 2000C
              HP 2500CM
              HP DeskJet 697C
              HP DeskJet 850C
              HP DeskJet 970C
              HP DeskJet 1100C
              Xerox DocuPrint M750

       Details can be found in the file reports.txt in the pcl3 distribution;
       its latest version is available via pcl3's home page (link to URL .  If you
       wish to report on the hardware compatibility for a particular printer
       model, please read the file how-to-report.txt.

       Omitting models already mentioned, previous (hpdj) versions of this
       driver were reported to work with the following printers:

              HP DeskJet 340
              HP DeskJet 400 (tested for Gray only)
              HP DeskJet 420
              HP DeskJet 500
              HP DeskJet 500C (tested for Gray only)
              HP DeskJet 520
              HP DeskJet 540
              HP DeskJet 560C
              HP DeskJet 600
              HP DeskJet 610C
              HP DeskJet 612C
              HP DeskJet 640C
              HP DeskJet 660C/660Cse
              HP DeskJet 670C
              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
              HP OfficeJet T45
              Lexmark 3000 Color Jetprinter
              Olivetti JP792 (see the option SendBlackLast)

       Most of the people who sent me reports did not state to which extent
       hpdj worked for their printer model.

   Colour Models
       Ignoring photo cartridges which are not supported by pcl3, DeskJet
       printers can be classified in four categories:

          •  The printer has only a black ink cartridge.

          •  The printer can print with either a black or a
             cyan/magenta/yellow (CMY) cartridge.

          •  The printer holds a CMY and a black cartridge simultaneously, but
             the two groups of inks are chemically incompatible and should not
             be overlayed.  (Don't worry: the printer is not going to explode
             if they do.  You merely get poorer results because the black ink
             will spread further than it should.  This is called "ink

          •  The printer holds a CMY and a black cartridge simultaneously and
             the inks can be mixed.  (Newer HP DeskJets use such bleed-proof

       This leads to four (process) colour models for the driver:

              Gray      Print in black only.

              CMY       Print with cyan, magenta and yellow.  In this mode,
                        "composite black" consisting of all three inks is used
                        to stand in for true black.

              CMY+K     Print with all four inks, but never mix black with one
                        of the others.

              CMYK      Print with all four inks.

       As a printer with both, a black and a CMY cartridge, can usually also
       print, e.g., with black only, the printer's "cartridge state" merely
       identifies one of these models as the maximal one.  Depending on the
       category of the printer, the driver will therefore accept one or more
       models.  The possibilities are:

              DeskJet Model                        Colour Models

              DeskJet, DeskJet Plus, DeskJet       Gray
              Portable, 500, 510, 520
              310, 320, 340, 400, 500C, 540, 600   Gray, CMY
              550C, 560C                           Gray, CMY, CMY+K
              660C, 670C, 680C, 690C, 850C,        all
              855C, 870C, 890C, 1120C

       The subdevices unspecold and unspec also permit all colour models.  A
       printer capable only of CMY might accept CMY+K or CMYK data, remapping
       them to CMY, and a printer capable of CMY+K might remap CMY data to

       The colour model CMY+K is not useful if you have a CMYK printer.  In
       contrast, if you have a CMY+K or CMYK printer and the two cartridges
       support different resolutions, the colour models Gray or CMY become
       interesting as well.  In most of these cases the black cartridge can
       print at a higher resolution than the CMY cartridge, although the
       converse does also occur.  In addition, ghostscript is generally
       fastest for Gray.

       PCL 3+ also supports the colour model RGB although Hewlett-Packard
       discourages its use.  For this model the printer internally converts
       the RGB data it receives into CMY data for printing.  Note that not
       everything which can be demanded when using a CMY palette in PCL 3+ is
       also permitted when using RGB.  Because of its limited usefulness, pcl3
       accepts the colour model RGB only for the subdevices unspecold and

   Media Sizes and Orientations
       A PostScript document describes its visible content with respect to a
       coordinate system called default user space.  Almost all PostScript
       devices are page devices which paint only a restricted rectangular area
       in default user space.  Part of the state of a page device is therefore
       the current page size, two numbers specifying the width and height of
       the sheet to be printed on.  These values must be interpreted from
       default user space, hence the page size not only describes the "sheet
       size" (extension irrespective of orientation) but also the orientation
       between page contents and sheet (portrait if width ≤ height, landscape
       otherwise).  The page size is requested by the user or the document,
       and it is one of the jobs of the device to satisfy this request.

       Ghostscript looks at several sources to determine the page size:

          •  the default size configured for gs (usually US Letter or ISO A4
             in portrait orientation),

          •  the value given to the option PAPERSIZE in the invocation,

          •  the size requested by the document, unless you specify

       The last applicable item in this list overrides the others, hence the
       current page size can change at runtime.

       The pcl3 driver splits the page size into sheet size and page
       orientation and passes the sheet size to the printer.  This works only
       if the printer accepts this size (accepted sizes are listed in your
       printer's manual).  For the explicitly supported printers, the driver
       knows which sizes are accepted and will refuse to print if an
       unsupported one is requested.  (If you suspect that pcl3 is in error
       concerning what is supported, check the list of supported sizes in the
       PPD file for the subdevice you are using.)  Group-3 printers also
       accept a custom page size command which permits printing on
       arbitrarily-sized media but only within certain limits which are also
       known to the driver.  Unlike the sheet size the page orientation is
       irrelevant for deciding whether a particular page size is supported or
       not.  The driver will adapt itself as required by the PostScript
       language and rotate the output if necessary.  (I know of only one other
       ghostscript driver capable of this.)

       In setting up the PostScript default user space, pcl3 does not treat
       envelope sizes differently from other sizes.

       The subdevice unspecold accepts all sizes supported by the HP DeskJet
       560C, unspec supports all discrete sizes known to the HP DeskJets
       850C/855C/870C/890C and treats in addition every other size request as
       a custom page size without imposing any limits.  If using any of these
       two subdevices you should change the list of supported sizes to fit
       your printer's capabilities; see the CONFIGURATION section below for

       In order for a document to be printed correctly a sheet of appropriate
       size must be provided and the driver must know what its orientation
       with respect to the printing mechanism is.  The latter is usually
       specified by reference to the feeding direction as "short edge first"
       or "long edge first".  Don't confuse this kind of orientation with the
       portrait/landscape orientation: the former ("sheet orientation") refers
       to the orientation of the sheet with respect to the feeding direction,
       the latter ("page orientation") describes the orientation of the sheet
       with respect to the page contents (default user space).  These
       orientations are logically independent: people inserting paper into the
       printer need to know about the first, people composing documents only
       care about the latter.

       Because pcl3 has no information about the actual dimension or
       orientation of the medium in the input tray, you must ensure yourself
       that this is appropriate.  By default, the driver assumes the dimension
       to be that requested via the page size, but you can override this
       assumption with an InputAttributes definition (see the Media Sources
       and Destinations subsection in the CONFIGURATION section below).

       There is no command in PCL 3+ to tell the printer about the sheet's
       orientation in the input tray, therefore it cannot be chosen and the
       manufacturer must prescribe it.  I am not aware of any precise and
       complete statement from Hewlett-Packard about what is required in this
       respect, hence you should check your printer's manual whether the
       assumptions made by pcl3 are correct or not: the driver assumes that
       media are always fed short edge first except when using the subdevices
       hpdj, hpdjplus, hpdj400, hpdj500 or hpdj500c for printing on envelope
       sizes (US no. 10 and ISO DL).  In these cases you should insert the
       medium long edge first.  If you find that pcl3's default behaviour is
       incorrect, you can override it with the option LeadingEdge or a media
       configuration file (see the CONFIGURATION section below).

   Print Quality and Media Properties
       With the introduction of the DeskJet 540, HP added two new PCL commands
       to the language: "Print Quality" and "Media Type".  For older DeskJets
       (groups 1 and 2), similar effects can be achieved by specifying some
       technical aspects of the printing process in detail.

       You can use the PrintQuality and Medium options to adapt the driver to
       the desired output quality and those properties of the medium it must
       know about, independent of which kind of subdevice you select.  If it
       corresponds to a printer understanding the new commands, the option
       values are passed through to the printer, otherwise these
       specifications are mapped to the older Depletion, Shingling, and Raster
       Graphics Quality commands based on recommendations from HP.  If you are
       not satisfied with the result in the latter case, use the options
       Depletion, Shingling and RasterGraphicsQuality to explicitly set these

   Diagnostic Messages
       Error messages issued by this driver start with "? component:" and
       warnings with "?-W component:".  The component can be eprn, pcl3, or
       pclgen, corresponding to the driver's three internal layers: the eprn
       device extends ghostscript without knowing PCL, pclgen is a module
       generating PCL without being aware of ghostscript, and pcl3 is the
       driver proper connecting the other two layers.

       All these messages are written on the standard error stream.

       When specifying options for gs you should keep in mind that case is
       significant, that some options must be passed as strings (-s) and
       others as general tokens (-d), and that gs effectively ignores every
       option it does not recognize.  Hence some care in spelling parameter
       names is necessary.

       If you are confused by the large number of options, don't worry.  Just
       ignore those you don't understand and concentrate first on the
       following ones, given here in the order of their importance: -sDEVICE,
       -sSubdevice, -sColourModel, -r, -sPrintQuality, and -sMedium.  You
       should also check whether there is an entry in the reports.txt file in
       the pcl3 distribution listing working option combinations for your

   Standard Options
       When calling gs with the pcl3 driver you can specify any option defined
       for ghostscript's prn (printer) device although some have particular
       meanings or restrictions.  This includes all device-independent options
       described in gs(1).  You should also look into ghostscript's extended
       documentation (file Use.htm (link to URL Use.htm)  and the section
       Device parameters (link to URL Language.htm#Device_parameters) in

                 This specification selects the pcl3 driver, but this is not
                 the only way to select it with this option.  See the
                 description of the Subdevice option below for other

       -dDuplex[=boolean] or -dDuplex=null
                 This parameter requests duplex printing and can be set to
                 true only for unspec and unspecold, and when the
                 DuplexCapability value is not none.  The default is null
                 which for this driver means that the printer's default
                 setting will be used.

                 If your printer does not support duplex printing you can
                 achieve the same effect manually by printing the odd and even
                 pages separately (use a command like psselect(1) from the
                 psutils package for extracting these parts) and reinserting
                 the paper in between.

       -r resolution
                 This option specifies the resolution in pixels per inch (ppi;
                 sometimes also called dots per inch, dpi).  The driver checks
                 whether the subdevice selected accepts the given resolution
                 unless the subdevice is unspecold or unspec.  Resolutions
                 supported by at least some of the other subdevices for some
                 of the colour models are 75, 100, 150, 300, 600Ã300 and 600
                 ppi.  Consult the PPD files in the pcl3 distribution if you
                 want to know the details.  The default resolution for pcl3 is
                 300 ppi.

                 At least the highest possible value should be listed in your
                 printer's manual, but some care is necessary in the
                 interpretation: the value given to pcl3 must be a resolution
                 supported by the printer's hardware for all the colorants in
                 the process colour model simultaneously and when operating in
                 raster graphics mode.  You should also keep in mind that if
                 your printer has two cartridges they might support different
                 sets of resolutions, i.e., which resolution you can choose
                 might depend on the colour model.  It is also possible that
                 the print quality has to be considered as well.  If you are
                 in doubt and have access to a manufacturer-endorsed driver
                 for your printer, use pcl3opts to find out about the settings
                 used by that driver.

                 At least some of the series-500 DeskJets claim to permit a
                 resolution of 600 Ã 300 ppi.  However, although these models
                 have a 600 dpi addressable horizontal resolution grid they do
                 not permit neighbouring pixels to be activated (and the dots
                 printed still have a diameter of about 1/300 in).  The raster
                 data generated by gs does not obey this restriction.  In
                 addition, it is possible that the higher resolution is anyway
                 only supported for the printer's builtin fonts and not for
                 general raster data.

                 Concerning the DeskJet 870C, my impression is that although
                 some HP documents and drivers use expressions like "600x300
                 dpi C-REt color" for this printer, the model does not really
                 support a resolution of 600 Ã 300 ppi.  First, it does not
                 accept pcl3's output with this resolution, and second, if one
                 inspects the best output of HP's Windows driver for this
                 printer with pcl3opts, one finds that the file uses a "mixed
                 resolution", i.e., 600 ppi for black and 300 ppi for CMY.
                 This is not supported by pcl3.

   Pcl3-Specific Options
       -dBlackLevels=levels and -dCMYLevels=levels
                 These options set the number of intensity levels per pixel
                 and colorant to use when printing with black or CMY inks,
                 respectively, and must be consistent with the colour model.
                 They permit access to the printer's Colour Resolution
                 Enhancement technology (C-REt) feature.  The defaults are 0
                 or 2, depending on the colour model chosen.  Other values are
                 only accepted for the subdevices hpdj8nnc, hpdj1120c and
                 unspec, and when not using the colour model RGB.

                 The subdevice unspec accepts any non-negative number of
                 levels except 1 up to 256.  The subdevices hpdj8nnc and
                 hpdj1120c accept the levels 0, 2, 3 and 4 with the following
                 restrictions if any of the levels is larger than 2 (these
                 restrictions have been determined experimentally with a
                 DeskJet 850C and are not based on HP documentation):

                    •  You can't use this feature with draft quality.

                    •  You can't use a colour model of CMY.

                    •  You must use a resolution of 300 ppi.

                    •  You must use 4 levels for black.

                 When using the subdevice unspec you should expect the printer
                 to similarly limit the possibilities.  In particular you must
                 expect the permitted number of levels to depend on colour
                 model, resolution and print quality.  So far I have not heard
                 of a PCL-3+ printer supporting more than four intensity
                 levels per colorant.

       -sColorModel=model or -sColourModel=model
                 This selects the colour model to be used by the driver: Gray,
                 RGB, CMY, CMY+K or CMYK.  The default is Gray.  Which colour
                 models are accepted depends on the subdevice, see Colour
                 Models in the section DESCRIPTION above.

                 A value of CMY for this option also sets BlackLevels to zero,
                 and if CMYLevels is zero when you demand any of CMY, CMY+K or
                 CMYK, it is set to two.  For RGB, effectively the same
                 happens as for CMY.  For all other situations you must ensure
                 yourself that colour model and intensity levels are
                 consistent or pcl3 will complain.  This rule implies that you
                 can ignore the level options unless you want to use a non-
                 default number of levels.

                 The PostScript page device dictionary entry ProcessColorModel
                 will not be correct for a colour model of CMY or CMY+K.
                 (Ghostscript returns the native colour space in this
                 parameter, not the process colour model.)

                 PCL interpreters understand several compression methods for
                 raster graphics data in order to speed up host-printer
                 communication.  The possible choices are:

                 0   Unencoded, non-compressed
                 1   Runlength encoding
                 2   Tagged Image File Format
                     (TIFF) revision 4.0
                     "Packbits" encoding
                 3   Delta Row Compression
                 9   Compressed Replacement
                     Delta Row Encoding

                 The default method is 9 except for the subdevices hpdj,
                 hpdjplus, and hpdj500 where it is 3 (these printers do not
                 support method 9), and for the subdevices unspec and
                 unspecold where it is 2 (this seems to give the best
                 combination of portability and compression).  Requesting
                 method 3 actually leads to a combination of methods 2 and 3.
                 The driver may temporarily choose method 0 if a compressed
                 data sequence would be longer than its uncompressed version.

                 Compression rates can vary drastically, depending on the
                 structure of the input.  However, although the absolute
                 values change, the relative order of efficiency between the
                 methods is usually the order of increasing method.  In short:
                 use method 9 if it is supported.

                 This parameter, if set to true, will force the printer to be
                 reconfigured for every page.  The option is superfluous for
                 printers which are truly PCL-3-conforming.

                 Use this parameter if you discover that you can print single-
                 page documents without problems but that the printer does not
                 accept multi-page files.  At present, the only printer I know
                 of for which such a reconfiguration is needed is the Xerox
                 DocuPrint M750.

                 You will usually specify this parameter when using pcl3 as
                 the final component in a CUPS (Common UNIX Printing System)
                 driver.  It will lead to appropriate page accounting messages
                 on standard error.  The default for this parameter is false.

                 If you have set this parameter to true you can't set it back
                 to false.  The driver will generate a warning if this is

                 When using pcl3 within CUPS you will normally set both,
                 CUPSAccounting and CUPSMessages.  There exist, however, CUPS
                 configurations where page accounting messages should be
                 generated by a command further down the print pipeline than
                 pcl3 (e.g., by a CUPS backend capable of processing PJL Page
                 Status messages and driving a printer which sends them).  In
                 these cases you should not specify -dCUPSAccounting.

                 Specify this parameter when using pcl3 as a component in a
                 CUPS (Common UNIX Printing System) driver.  It will modify
                 the format of error messages and warnings as expected by
                 CUPS.  The default for this parameter is false.

                 This option is only available for old DeskJets (including
                 unspecold) and when printing in colour.  The integer
                 depletion controls an algorithm for removing certain pixels
                 from the image; this leads to less ink being applied to the
                 medium.  The possible values for depletion are:

                 1   No depletion
                 2   25%
                 3   50%
                 4   25% with gamma correction
                 5   50% with gamma correction

                 The default value is derived from Medium and PrintQuality.
                 The values 4 and 5 are not understood by the DeskJet 500C,
                 but even for the other printers these values are not useful
                 because PostScript permits finer control for gamma correction
                 through transfer functions (see the subsection Transfer
                 Functions in the next section).

                 With the exception of the DeskJets 500 and 500C, series-500
                 DeskJet printers can be told to guarantee a minimum drying
                 time of delay seconds before the next page of the same print
                 job is dropped on a newly printed page.  (This interval can
                 be terminated by pressing the Load/Eject button.)  The
                 printer will choose default values depending on the current
                 print quality, hence it is normally not necessary to specify
                 this option and the feature is even considered obsolete for
                 post-series-500 DeskJets although it is still supported by
                 some of them.

                 Permissible values for delay are null and integers in the
                 range 0 to 1200, where null instructs pcl3 not to send a
                 corresponding command, 0 establishes default values for the
                 current print quality, and all other values explicitly
                 request the duration in seconds.  The default is null.

                 Looking at the final result (sheet printed), there are two
                 kinds of duplex printing identified by the two possible
                 values for the option Tumble.  Not all printers capable of
                 duplex printing, however, provide the hardware support
                 necessary for both, hence the driver must be told what the
                 printer offers in order to be able to compensate for the
                 missing functionality.  The parameter capability can be any
                 of the following:

                 none                  no duplex capability
                 sameLeadingEdge       second pass of sheet
                                       occurs with the same
                                       leading edge
                 oppositeLeadingEdge   second pass of sheet
                                       occurs with the opposite
                                       leading edge

                 both                  second pass of sheet can
                                       occur with either edge

                 This option can only be specified for unspecold and unspec.
                 The default value is none.

                 The correct setting for the HP DeskJet 970C is
                 oppositeLeadingEdge, but the printer permits access to its
                 duplex functionality only if you specify in addition
                 -sPJLLanguage=PCL3GUI -dOnlyCRD.  (Many thanks to Dawei W.
                 Dong for an extensive series of experiments.)

                 If a printer does not offer hardware support for both
                 orientations, the document to be printed must execute
                 showpage after a possible page-level restore and not before,
                 otherwise the driver will not be able to compensate for the
                 missing functionality and only one of the two Tumble values
                 will work.  All DSC-3.0-conforming PostScript files have the
                 required property.

                 Most printers, including every PCL-3+ printer I know of, can
                 render only a small number of intensities per pixel and
                 colorant.  In the most frequent case, merely two levels are
                 possible.  As this is usually not sufficient, various methods
                 have been devised to achieve a larger palette; this is
                 possible at the expense of spatial resolution.  Because of
                 this tradeoff between effective resolution and the number of
                 colours which can be distinguished, the best method for a
                 given document depends on the contents of the document and
                 the user should therefore be able to select it.

                 The pcl3 driver supports the following methods for intensity

                 printer           use the printer's capabilities
                 halftones         use ghostscript's halftoning
                 Floyd-Steinberg   use Floyd-Steinberg error diffusion

                 The default method is halftones.  The methods differ only in
                 their treatment of intensities which cannot be represented
                 directly by the printer.  If your document contains for
                 example only black text, they all produce the same result,
                 albeit at different speeds.

                 With printer, pcl3 will cause everything to be painted at the
                 full hardware resolution but will have to map all colours to
                 the nearest levels the printer can represent directly.  For a
                 CMY or CMYK printer with two intensity levels, this results
                 in just 8 useful colours per pixel.  This value is therefore
                 usually only sensible for documents with a small number of
                 widely different saturated colours where accurate colour
                 reproduction is of minor importance but achieving the highest
                 possible resolution is essential.  Another possible
                 application is the case of PostScript input which has already
                 been adapted to the printer's resolution and available
                 intensity levels.

                 With halftones, ghostscript will use what looks like standard
                 PostScript halftoning algorithms.  For details, consult a
                 PostScript manual.  However, you should know that
                 ghostscript's current halftoning implementation has some

                    •  The algorithm cannot handle different non-zero values
                       for BlackLevels and CMYLevels.  In this situation gs
                       will in general assume that the number of black levels
                       available is equal to that for CMY levels.  Depending
                       on which of the numbers is smaller, there will then
                       either be unused black levels or some will be used more
                       than once.

                    •  When you are using values larger than 2 for BlackLevels
                       or CMYLevels, ghostscript does not discover by itself
                       that it could now achieve the same number of shades
                       with smaller halftone cells.

                    •  Most of the ways of increasing the halftone screen
                       frequency seem to fail.  I have been successful only
                       with the somewhat pedestrian approach of using
                       threshold arrays, and even that worked only for some

                    •  For particular CMYK values and with ghostscript
                       version 6 or higher, the colour becomes drastically
                       wrong.  One example is CMYK = (0.99998472, 0.002549, 0,
                       0.00367827); this should be almost a pure cyan but is
                       instead displayed as a sort of pink.  If one subtracts
                       one unit in the last position for any of the non-zero
                       components, the result becomes acceptable.  The problem
                       has not been observed with ghostscript 5.50.

                    •  For ghostscript versions up to and including 5.50, if
                       you are using the colour model CMYK and more than 2
                       black levels you should not set merely a single
                       halftone screen (setscreen, a type-1 or a type-3
                       halftone dictionary) because ghostscript's dithering
                       routine can in this case return non-monotonic levels of
                       black for monotonic input intensities.  However, if you
                       specify independent halftone information for the colour
                       components, gs uses a slower but more accurate
                       algorithm instead which does not lead to the wrong
                       behaviour.  It is not necessary for the halftone
                       information to be different for different components to
                       achieve this.  Note that ghostscript installs separate
                       halftone screens for CMYK devices by default if the
                       resolution is at least 150 ppi.

                 Whenever you modify the halftone screens you should therefore
                 use a test file like in the pcl3 distribution
                 to check whether you obtain the desired result.  In
                 particular, you should count the number of intensities you
                 can distinguish for a single colorant: if it is obviously not
                 one plus the number of pixels in the halftone cell times one
                 less than the number of hardware intensity levels, something
                 has gone wrong.  This is, for example, the case if you
                 specified 4 black levels and a 2Ã2 halftone cell, and you
                 then can distinguish more than 1 + 4Ã3 = 13 intensity levels.
                 You should also watch for non-monotonic jumps in intensity
                 and incompletely filled shapes.

                 The value Floyd-Steinberg selects Floyd-Steinberg error
                 diffusion as the method for rendering intensities.  Use this
                 in particular for printing photographs and other documents
                 with a large number of colours or small irregular shapes.
                 Regrettably, pcl3's speed is much slower with this method
                 than in the other cases, hence this value should only be used
                 when it is really needed (e.g., when you run into one of
                 ghostscript's halftoning problems) or when the delay is

                 If you are using ghostscript 5.50 and the page to be rendered
                 needs a lot of memory (this applies in particular to Floyd-
                 Steinberg in colour) a core dump may result under certain
                 circumstances.  You can get around this by increasing the
                 MaxBitmap parameter or by switching to a newer ghostscript

                 This option can be used to specify which edge of the sheet
                 will enter the printer first.  The permitted values identify
                 this edge by reference to the orientation of default user
                 space on the sheet when printing with default settings
                 (except for LeadingEdge) and a page size having width ≤
                 height ("canonical page in portrait orientation"):

                 null   No request for media orientation
                    0   Short edge; top of canonical page
                    1   Long edge; right side of
                        canonical page
                    2   Short edge; bottom of canonical
                    3   Long edge; left side of canonical

                 As far as I know, given a particular PCL-3+ printer and a
                 particular media size, you cannot choose between short edge
                 first (0 or 2) and long edge first (1 or 3): this orientation
                 is prescribed by the manufacturer and should be documented in
                 your printer's manual.  If in doubt, use short edge first
                 when inserting the medium.

                 The default value for edge is null.  This leads either to 0
                 or to 3, depending on whether the subdevice normally expects
                 media of this size to be fed short edge first or long edge
                 first.  See the subsection Media Sizes and Orientations in
                 the DESCRIPTION section above for details.

                 If you find that you can't set this parameter from PostScript
                 but you can set it from the command line, ghostscript's
                 setpagedevice definition probably does not pass the parameter
                 to drivers.  Read the gs-mods.txt file in the pcl3
                 distribution on how to fix this.

                 It is possible to request a DeskJet printer to wait before
                 each page of a document until the Load/Eject button is
                 pressed on the printer.  This is intended for situations
                 where some special medium is used or the medium has to be
                 inserted into an input slot holding only one sheet at a time.
                 The default setting for this option is false.

                 In PCL, manual feed is established by requesting a particular
                 media source (2), hence you should expect that setting this
                 parameter will interfere with the input tray selection via
                 InputAttributes (see the Media Sources and Destinations
                 subsection in the CONFIGURATION section below).

                 This option must specify an existing file containing a list
                 of supported media sizes, sheet orientations and
                 corresponding margin descriptions for the printer.  This will
                 take precedence over the builtin subdevice-specific lists.
                 The format of the file is described in the CONFIGURATION
                 section below.  This option is primarily intended to be used
                 with the subdevices unspecold and unspec.

                 The default is not to use a media configuration file but the
                 builtin lists.  However, a media file path can also be
                 specified at compile time overriding the default behaviour
                 for unspec only.  Using the MediaConfigurationFile option in
                 addition will take precedence over the compiled-in media file

                 This option sets the standard PostScript page device
                 parameter MediaPosition to the specified value.  The integer
                 position identifies an input tray for feeding media from and
                 must refer to an existing entry in the InputAttributes
                 dictionary (see the Media Sources and Destinations subsection
                 in the CONFIGURATION section below) in order to take effect.
                 The media selection process will use this entry in preference
                 to others provided it matches the media request.  The default
                 is not to request a particular tray by position but to look
                 for a best match based on other properties.  As ghostscript's
                 default configuration defines only one entry in
                 InputAttributes this option is ineffective unless you modify

                 With current ghostscript versions you can't use this
                 parameter to select a negative position.  The driver will
                 issue a warning if you attempt it.  If the entry is actually
                 selected, a rangecheck error from ghostscript will follow.
                 This restriction applies only to this device parameter, not
                 to permissible values for position numbers in
                 InputAttributes: if you want to use a negative position, you
                 can do so by making sure that it is the only matching entry
                 or by selecting it via Priority.

                 This option selects the type of medium you wish to print on
                 as far as the printer needs to know about it.  The possible
                 choices are:

                 0   plain paper
                 1   bond paper
                 2   HP Premium paper
                 3   glossy paper
                 4   transparency film
                 5   quick dry glossy
                 6   quick dry transparency

                 The default is plain paper.  For medium, you can specify the
                 full strings (these are the standard values), the (in some
                 cases) one-word strings resulting from dropping "paper",
                 "film", and "HP", or an integer.  Out-of-range numerical
                 values generate a warning but are passed through to the
                 printer if you are using a group-3 subdevice.  If you don't,
                 the effect is the same as specifying plain paper.  The values
                 5 and 6 are unknown to most DeskJets; the only official
                 exception I know of is the HP 2000C printer.  Your printer's
                 manual should tell you which kinds of medium are supported.

                 This parameter influences the PCL code generated and should
                 only be specified for group-3 DeskJets.  The default value is
                 false and leads to the new PCL command Configure Raster Data
                 being used only when it is necessary.  Specifying true leads
                 to Configure Raster Data being used even in those cases where
                 older commands would be sufficient.

                 There are indications that printers with a PCL dialect of
                 "PCL Level 3 enhanced" need a value of true for this option
                 to enable some of their functionality.

                 The pathname must specify either a non-existent file in a
                 directory with write permission or a writable file with a
                 single line containing a non-negative integer.  In the first
                 case, pcl3 will create the file and insert the number of
                 pages printed, in the second case the number will be
                 incremented by that amount.  Parallel invocations of gs are
                 permitted to use the same file.  pcl3 will also make the
                 initial page count available in its page device dictionary.

                 This option is mainly intended for spooler backends calling
                 pcl3.  It can be used to keep track of the total number of
                 pages printed and also for per-job accounting.  I recommend
                 using this option for the first purpose and to make a note of
                 the values in the resulting files whenever you insert a new
                 ink cartridge.  This will enable you to get an indication of
                 how much a printed page costs, and hence why it is a good
                 idea to use draft quality whenever possible and why you
                 should have bought a laser printer.

                 The driver can be compiled without this option present but on
                 a UNIX system I would not expect this to be done unless gs
                 offers the same functionality in a driver-independent manner
                 which it currently does not.

                 pcl3 is distributed with example files if-pcl3 and cups-pcl3
                 of Berkeley and CUPS spooler backends using this option.

       -sPCLInit1=string and -sPCLInit2=string
                 These options can be used to insert additional PCL commands
                 into pcl3's output.  Strings given to PCLInit1 will be sent
                 immediately after the initial Printer Reset command, the
                 value of PCLInit2 will be emitted shortly before the raster
                 data of the first page.  The default is not to send any
                 additional commands.

                 Don't use any of these options unless you understand PCL or
                 someone who does tells you which value to choose under which

                 Because not every possible string value can be passed from
                 the command line, these parameters are best set from a
                 PostScript file.

                 This option can be used to surround the generated file with
                 Printer Job Language (PJL) commands declaring it to be a
                 single print job called jobname.  If you omit jobname, you
                 create an unnamed job.  The string jobname may not contain
                 double quotes or control characters except HT (the forbidden
                 byte codes are 0 to 8, 10 to 31, and 34).

                 Use this option if your printer understands PJL and you
                 discover either that settings for one job influence the
                 following job or that the printer does not recognize the end
                 of the job (lights remain flashing or a control panel still
                 displays a processing message).  If you send the generated
                 PCL file through a PJL filter, in particular one querying the
                 printer's state, omit this option and use the filter for this
                 purpose instead.

                 If a printer supports several command languages and PCL 3+ is
                 not the default, the printer must be told to switch to PCL 3+
                 at the beginning of the print job.  Hewlett-Packard's
                 printers use a Printer Job Language (PJL) command for this
                 purpose.  Specifying this option will switch the printer to
                 language for the duration of the job and back to the default
                 at the end.

                 This option is not usually necessary except that there are
                 indications that printers with a PCL dialect of "PCL Level 3
                 enhanced" need -sPJLLanguage=PCL3GUI to enable some of their

                 You should never use the option unless you have a reliable
                 source for the values of language accepted by your printer,
                 for example the output from pcl3opts for a file generated by
                 an official driver for the printer in question.  Values I
                 have seen so far are PCLSLEEK and PCL3GUI.

                 If you send the generated PCL file through a PJL filter, omit
                 this option and use the filter for this purpose instead.

                 There are three print quality settings:

                 -1   draft or econo
                  0   normal
                  1   presentation or best

                 The default is normal.  You may specify the strings or an
                 integer.  Out-of-range numerical values will generate a
                 warning but are passed through to the printer if you have
                 selected a group-3 subdevice.  If you haven't, the effect is
                 the same as specifying normal.

                 This option is only available for old DeskJets (including
                 unspecold) and controls a trade-off between quality and print
                 speed.  The possible values for quality are:

                 0   Use current control panel setting
                 1   Draft
                 2   High

                 Specifying this option overrides the default value derived
                 from Medium and PrintQuality.

                 When printing with four inks, a PCL-3+ printer expects the
                 colour information for a row of pixels in the order black,
                 cyan, magenta, and finally yellow (KCMY).

                 There exists at least one printer (Olivetti JP792) which
                 claims to accept PCL 3+ but expects the colour planes to
                 arrive in the order CMYK.  If you have a printer with this
                 property, use this option.  The default value is false.

                 Most HP drivers for newer DeskJet printers generate PCL files
                 starting with a sequence of 600 NUL characters, at least one
                 uses even 9600 NULs.  I have seen no documentation of this
                 feature but I assume that in PCL the NUL character demands a
                 null operation, i.e., does nothing.  Just in case such a NUL
                 sequence is useful under certain circumstances, this option
                 can be used to request it.  (It has been suggested that this
                 is needed to get the printer to accept new PCL commands if
                 the previous print job was aborted in the middle of a
                 command.)  The value number specifies the number of NUL
                 characters to send and must not be negative.  The default is
                 zero.  Note that initial NULs might confuse spooler backends
                 which try to determine the file type from the first few bytes
                 of the file contents.

                 There is no point in using this option if some other command
                 in your print pipeline will add Printer Job Language (PJL)
                 commands to the pcl3-generated file.

                 This option is only available for group-2 DeskJets (including
                 unspecold) and controls the number of passes the print head
                 makes over the medium.  A higher number permits more
                 neighbouring pixels to be printed in separate passes, thereby
                 reducing the likelihood of the ink spreading into the next
                 pixel.  The possible values for shingling are:

                 0   No shingling
                 1   2 passes (50% each pass)
                 2   4 passes (25% each pass)

                 Specifying this option overrides the default value derived
                 from Medium and PrintQuality.

                 This option identifies the printer model for which the
                 generated file is intended.  The following names (mostly of
                 Hewlett-Packard DeskJet printers) are accepted for subdevice:

                        hpdj, hpdjplus, hpdjportable, hpdj310, hpdj320,
                        hpdj340, hpdj400, hpdj500, hpdj500c, hpdj510, hpdj520,
                        hpdj540, hpdj550c, hpdj560c, unspecold, hpdj600,
                        hpdj660c, hpdj670c, hpdj680c, hpdj690c, hpdj850c,
                        hpdj855c, hpdj870c, hpdj890c, hpdj1120c, unspec.

                 The correspondence with the real printer name is, I hope,
                 obvious.  Note that hpdj does not select the hpdj driver
                 (this driver's predecessor) but configures the pcl3 driver
                 for the "classical" HP DeskJet.

                 With the exception of hpdj, unspec and unspecold, your gs
                 binary might support the subdevice names also as device
                 names, i.e., instead of specifying -sDEVICE=pcl3
                 -sSubdevice=subdevice you might be able to write
                 -sDEVICE=subdevice.  Check ghostscript's list of available
                 devices to find out whether this is the case (gs -h).

                 The choice of subdevice primarily determines which
                 resolutions, colour models, intensity levels and media sizes
                 the driver will accept, where the output will appear on the
                 page, and to some extent what PCL code the driver will
                 generate.  Several of the subdevices are treated identically.

                 The default subdevice is unspec.  It is intended for new
                 PCL-3+ printers not explicitly supported by this driver.  For
                 unspec, all subdevice-specific checks (e.g., supported
                 resolutions) are turned off.  Supported media sizes and
                 margin settings are assumed to be identical with those for
                 the DeskJets 850C/855C/870C/890C, but you can and should use
                 the MediaConfigurationFile option or its compile-time
                 equivalent to override this.  The PCL code generated assumes
                 a new DeskJet in the sense that it should be at least of the
                 level of a DeskJet 540 supporting the PCL commands Media Type
                 and Print Quality.  If you specify unequal horizontal and
                 vertical resolutions or more than two levels of intensity per
                 colorant and pixel, the printer must in addition understand
                 the Configure Raster Data command.

                 The subdevice unspecold is similar but behaves like a DeskJet
                 560C.  It supports all colour models and all uniform
                 resolutions (the horizontal resolution is equal to the
                 vertical resolution).

                 If you choose to use unspec or unspecold it is your
                 responsibility to ensure that pcl3 is only called with
                 parameter values the printer can handle.  This applies in
                 particular to the resolution and the intensity levels.

                 If you set this parameter from a PostScript document you must
                 know that doing this re-initializes most of the pcl3
                 parameters to their default values.  If you set several page
                 device parameters in a single setpagedevice call the
                 Subdevice option will be treated first.

                 When duplex printing is requested (-dDuplex), this parameter
                 specifies whether the y axes of PostScript's default user
                 space on the two sides of the sheet (assumed to use the same
                 page size) point to the same edge or to opposite edges.  The
                 default value false indicates the same edge and is usually
                 suitable for binding on the left while true indicates
                 opposite edges and should be used for binding at the top.

                 You should note that the interpretation of Tumble refers to
                 default user space: if a PostScript program has rotated the
                 user space coordinate system the association between the
                 page's apparent "up" direction and the binding edge will
                 usually not be the one desired.  You should watch for this in
                 particular when creating output in landscape orientation from
                 an application still generating PostScript Level 1 code.  If
                 a ghostscript screen driver like x11 displays the pages with
                 the right side up you should have nothing to worry about,
                 even in the case of landscape orientation.  (You must call gs
                 directly for this test, not via ghostview.)  If the
                 orientation between the two sides turns out to be wrong, you
                 will have to print again with the opposite value for Tumble.
                 If that does not help and you have a printer supporting only
                 one of the two possible duplex orientations, check the
                 relative order of restore and showpage in the document you
                 printed (see the DuplexCapability option above).

                 This option should only be given when printing on A6 and with
                 a printer like the HP DeskJet 1120C which distinguishes
                 between A6 sheets and A6 postcards.  The option can be used
                 to specifically request one of the alternatives.  The default
                 value is null and means that sheets are preferred to
                 postcards, but either is acceptable if supported.  The other
                 permitted values are true and false.

                 This option applies to all page sizes set while ghostscript
                 executes and this includes the default size set at startup.
                 If you wish to use -dUseCard=true you will therefore usually
                 have to specify the PAPERSIZE option in the call, otherwise
                 an error will occur because there is no postcard variant for
                 the usual default sizes (ISO A4 and US Letter).

   Option Combinations for Hardware Parameters
       Not all combinations of colour model, resolution, number of intensity
       levels, print quality and media type are accepted or make sense.
       Unfortunately, Hewlett-Packard does not publicly release sufficient
       information to find the best possible combinations.  A good way to find
       reasonable settings is to use pcl3opts on files generated by an
       official driver for the printer.  You should also check the file
       reports.txt in the pcl3 distribution.  In addition, I'll provide some
       remarks here.

       As a general rule, it is unprofitable to use a finer resolution than
       300 ppi or more than 2 intensity levels for draft quality.  A coarser
       resolution in particular can reduce the time needed to generate and
       transmit the file to the printer.  Combined with draft quality this
       leads to what HP calls an "EconoFast" mode.

       As an exception, here are recommendations based on official HP
       documentation for the DeskJet 1120C.  The table lists the resolution
       and the number of black or black and CMY levels if not 2.

              Quality        Gray                CMYK
              draft          300 ppi             300 ppi
              normal         300 ppi, 4 levels   300 ppi, (4,3) levels
              presentation   600 ppi             300 ppi, (4,4) levels

       These seem reasonable values for the supported series-800 DeskJets as

   Checking Page Device Parameters
       As for all ghostscript drivers, pcl3's command line options correspond
       to identically-named PostScript page device parameters and are
       accessible in the usual way.  In particular, it is possible to read the
       value of a parameter by letting gs execute a command like

              currentpagedevice /parameter get ==

       where parameter is the name of the parameter one would like to inspect,
       for example BlackLevels.  This is useful if you are in doubt whether
       the driver has accepted your options.  Of course, for printer-visible
       parameters you can also use pcl3opts on the output file.

       The ghostscript distribution contains a program which
       displays the page device dictionary on standard output but does not
       resolve nested dictionaries.  The pcl3 distribution contains a similar
       program which does not have this limitation.

   Media Configuration File
       A media configuration file (media file for short) can be used to
       override the builtin subdevice-specific lists of supported media sizes
       and, for each size, the sheet orientation in the input tray and the
       margins enforced by the printer.  This feature is mainly intended to be
       used in conjunction with unspec and unspecold: if you have a model not
       directly supported by this driver, look up the supported media sizes,
       the rules for inserting media and the corresponding printable regions
       in your printer's manual and enter them in a media file.


              Entering a media size in the file which is not really supported
              by your printer is not useful: the PCL interpreter will simply
              ignore the request to set this size, and printer and driver may
              have diverging opinions about what the margins will be.  If you
              need to print on a medium of a size not supported by your
              printer, choose a larger and printer-supported size in
              PostScript or via FIXEDMEDIA, shift the image if necessary,
              establish properly-positioned clipping regions within the real
              size, and print.  Or you could use a suitable page size recovery
              policy for PostScript's media selection process.  However, if
              you have a newer DeskJet supporting custom page sizes, all this
              is not necessary.

       Margin specifications are important for two reasons: the values for the
       left and top margins determine how the output is positioned on the
       page, and sufficiently large values for the right and bottom margins
       prevent the print head being caught at the paper's edge and printing
       beyond the sheet, respectively.  Because DeskJet printers usually have
       an inconveniently large bottom margin (usually 0.4-0.8 inches or 10-20
       mm), one might be tempted to specify smaller values than listed in the
       printer's manual.  However, one user reported that this led to the
       printer depositing a large wet blob of black ink at the bottom of the

       A line in the media file can be blank, a comment line (first non-blank
       character is '#'), or one of the following:

              unit   unit
              size   left bottom  right top

       A unit line specifies in which units margin specifications in the
       following lines should be interpreted.  unit can either be in (inch) or
       mm (millimetre) with in being the default.  A unit specification
       remains in force until overridden by a following unit line.

       The second kind of line states that the model supports a particular
       media configuration and specifies the hardware margins in force for
       that case.  The size word consists of two parts: a keyword denoting the
       extension and an optional suffix.  The following keywords are accepted
       (entries marked with an asterisk (*) are those used by the subdevice
       unspec if no media file is employed; entries with a section/paragraph
       sign (§) similarly identify the sizes used by unspecold):

            Index3x5in   US index card 3 Ã 5 in
              EnvChou4   Japanese long envelope #4 (90 Ã 205
            EnvMonarch   US Monarch envelope (3.875 Ã 7.5
             *Postcard   Japanese Hagaki card (100 Ã 148 mm)
           *Index4x6in   US index card 4 Ã 6 in
              §*Env10   US no. 10 envelope (4.125 à 9.5 in)
                    A6   ISO/JIS A6 (105 Ã 148 mm)
               *A6Card   ISO/JIS A6 postcard (105 Ã 148 mm)
              §*EnvDL   ISO DL envelope (110 à 220 mm)
              EnvUS_A2   US A2 envelope (4.375 Ã 5.75 in)
                *EnvC6   ISO C6 envelope (114 Ã 162 mm)
              EnvChou3   Japanese long envelope #3 (120 Ã
                         235 mm)
           *Index5x8in   US index card 5 Ã 8 in
             Statement   US Statement (5.5 Ã 8.5 in)
        DoublePostcard   double Postcard (148 Ã 200 mm)
                   *A5   ISO/JIS A5 (148 Ã 210 mm)
                 EnvC5   ISO C5 envelope (162 Ã 229 mm)
                 ISOB5   ISO B5 (176 Ã 250 mm)
                *JISB5   JIS B5 (182 Ã 257 mm)
          §*Executive   US Executive (7.25 à 10.5 in)
                 §*A4   ISO/JIS A4 (210 à 297 mm)
             §*Letter   US Letter (8.5 à 11 in)
              §*Legal   US Legal (8.5 à 14 in)
              EnvKaku2   Japanese Kaku envelope (240 Ã 332
                 JISB4   JIS B4 (257 Ã 364 mm).  This is
                         distinct from ISO B4 (250 Ã 353
               Tabloid   US Tabloid (11 Ã 17 in; in
                         landscape orientation also called
                    A3   ISO/JIS A3 (297 Ã 420 mm)
              HPSuperB   what HP calls Super B (13 Ã 19 in)
       *CustomPageSize   custom page size

       Note the difference between A6 (sheet) and A6Card (postcard).  I do not
       know why Hewlett-Packard associates this distinction with media size
       instead of media type.  However, with the exception of the 1120C all
       DeskJet printers I know of use only A6Card anyway.

       In looking at your printer's documentation, bear in mind that a driver
       might support more sizes than the printer accepts; pcl3 needs to be
       given the latter values.  If you are in doubt what your printer
       understands, pcl3opts can tell you which media size another driver

       Custom page sizes are not understood by older printers and may be used
       in a media file only for the subdevices hpdj540, hpdj6nn[c], hpdj8nnc,
       hpdj1120c, and unspec (group 3).  In these cases you can print, within
       certain limits, on arbitrarily-sized media.  The driver knows these
       limits and refuses to generate a file if you exceed them.  For unspec,
       there are no limits.  pcl3 will tell the printer to expect a custom
       page size only if there is no fitting discrete entry.

       Although it is possible, on those printers which support it, to use a
       media configuration file containing only a custom page size entry, I
       advise against it because this size specification is only intended as a
       last resort.  If you have a custom page size entry in the media file,
       you should therefore list all discrete sizes supported by your printer
       or at least those which you expect to use.

       The size keyword in the size field can be extended by the following

       Big       For pcl3, this suffix means banner printing.  In these cases
                 the top and bottom margins are usually zero.  HP DeskJets
                 supporting banner printing do so only for ISO A4 and US
                 Letter.  Your media file should then contain entries for the
                 sizes A4, A4Big, Letter, and LetterBig.

                 By default, pcl3 assumes that the media listed are fed short
                 edge first.  If you specify this qualifier, the driver will
                 assume that you are going to feed media of this size long
                 edge first.  If, for example, your printer's manual states
                 that envelopes of size ISO DL should be fed long edge first,
                 the corresponding size field in your media file should
                 contain the string EnvDL.Transverse, not EnvDL.

                 This specification (or its absence) can be overridden with
                 the option LeadingEdge in the call.

       The builtin lists for the unspec and unspecold devices do not contain
       size entries with any of these suffixes.

       Every media file must contain at least an entry which fits
       ghostscript's default page size, usually ISO A4 or US Letter.  Only
       those sizes which are listed will be accepted by pcl3.  This is
       independent of a .Transverse suffix.  If there are several entries in
       the media file with the same size value, only the first is used.

       The margins in a size entry should be valid for monochrome printing in
       raster graphics mode.  If a non-monochrome colour model is selected and
       unless the bottom margin is exactly zero, it will be increased by a
       subdevice-specific amount.  This increment is zero for unspecold and

       The orientation of the margins refers to the feeding direction: you
       should imagine holding the sheet such that the leading edge is at the
       top and the side to be printed on is towards you.  Be careful with
       envelopes: older (pre-1997) HP documentation usually gives the margins
       in landscape orientation even for those printers where the envelope has
       to be fed short edge first.  You can check this by looking for the
       largest margin value: if it is on the left instead of at the bottom you
       almost certainly have such a landscape-based specification; rotate the
       values by +90 degrees (quarter-circle counterclockwise) in these cases.
       The margins have to be specified as non-negative floating point numbers
       in inches or millimetres as announced by the last preceding unit line.
       The floating point format is that of the "C" locale.

       pcl3 is distributed with an example of a media configuration file,

   PostScript Configuration Files
       Sometimes it is desirable to execute additional PostScript commands for
       a particular file or possibly all files sent to a particular printer or
       print queue.  With ghostscript this is easily possible because gs
       accepts several file names in the invocation and processes them
       sequentially.  This is particularly appropriate for those PostScript
       operators which affect device-specific features and should therefore
       not appear in a portable page description and for settings which would
       be part of the interpreter's persistent state when using a real
       PostScript printer.

       The pcl3 distribution contains examples of filters if-pcl3 for the
       Berkeley spooler lpr(1) and cups-pcl3 for the Common UNIX Printing
       System cupsd(8).  These filters permit the use of a print-queue-
       specific configuration file.

   Media Sources and Destinations
       PostScript has a builtin mechanism for selecting media sources and
       destinations based on certain properties of the document.  This usually
       requires a system administrator to set the InputAttributes and
       OutputAttributes dictionaries in the device's page device dictionary
       according to the current state of the printer and its intended use.
       For example, if there are two input trays, one currently holding paper
       and the other transparencies, the administrator could configure the
       InputAttributes dictionary such that print jobs requesting
       transparencies in a certain manner automatically fetch media from the
       second tray and every job needing a size not currently available will
       terminate with an error message.  Unfortunately, in order to work as
       expected this process usually also requires some additional action on
       the part of the entity generating the PostScript code to be printed.

       If your printer is capable of sensing certain properties of media in
       the input tray (e.g., media size) or assumes a fixed association
       between media properties and input trays you must expect this
       functionality to interfere with the process referenced here.

       In the attributes dictionaries, each tray is identified by an integer,
       its position number.  When ghostscript successfully matches the
       document's requirements with trays the resulting position numbers are
       accessible to the driver.  The pcl3 driver uses these numbers (except
       0) directly as arguments for the PCL commands "Media Source" and "Media
       Destination", respectively.  For the Media Source values (input trays),
       I know of the following meanings:

              -1   banner printing
               1   default tray; portable CSF
                   (DJ 340); tray 2 (HP
               2   manual feed
               3   envelope feed
               4   desktop CSF (DJ 340); tray
                   3 (HP 2500C)
               5   tray 1 (HP 2500C)
               7   auto select (HP 2500C)

       You'll have to experiment with your printer to find out which values
       are accepted and what their interpretation is.  In general, you can
       only expect 1 and 2 to work.  Unrecognized values should be simply
       ignored by the printer leading to the medium being fetched from the
       default tray.  To shorten the search, use pcl3opts if you can in order
       to find out which values other drivers generate.  Don't bother testing
       the value 0: in PCL its effect is to eject a page and, as this is not
       needed, pcl3 uses it to mean that no particular tray should be

       I do not know of any PCL-3+ printer supporting more than one output
       tray, hence the corresponding implementation is based on the
       speculation that such a feature, if made available, would use the same
       command as in PCL 5.  Again, a value of zero is used by pcl3 to mean
       "don't select a particular tray".

       Ghostscript's default configuration defines InputAttributes and
       OutputAttributes dictionaries with one entry each, having position
       number 0 in both cases, and maps all requests to these positions.  As
       explained above, this configuration will lead to pcl3 not requesting
       any particular input or output tray.  If you wish to modify this you
       should consult a PostScript manual, for example the sections 6.2.1 and
       6.2.4 in the PostScript Language Reference.  However, I'll present here
       three examples without explanation.  In all cases, the PostScript code
       shown should be executed before the document to be printed.

       The first example is intended for situations where you always wish to
       select a specific input tray:

                /InputAttributes <<
                  0 null
                  input << /PageSize [6 6 524287 524287] >>
              >> setpagedevice

       Replace input with the number of the tray you wish to use.  The second
       example does the same for the output tray:

                /OutputAttributes <<
                  0 null
                  output << >>
              >> setpagedevice

       Replace output with the number of the tray you wish to use.

       For the final example assume that you have one input tray, filled with
       media of a certain default size, and you wish all print jobs requesting
       another size to automatically switch to manual feed so you can insert
       these special sheets at leisure.  In that case, let gs execute the
       following PostScript code:

                /InputAttributes <<
                  0 << /PageSize [width height] >>
                  2 << /PageSize [6 6 524287 524287] >>
                  /Priority [0 2]
              >> setpagedevice

       For width and height you must insert the actual dimensions of your
       default size in units of 1 bp ("big point", 1/72 inch, roughly 0.35
       mm); the tolerance is 5 bp.  In contrast to a document's page size, the
       orientation is irrelevant here.

       If you drop the second entry and the Priority line in the last example
       you obtain a configuration where ghostscript will refuse to print any
       document not requesting the specified media size.  If you retain the
       two lines and you are using the unspecold or unspec devices it is
       advisable to insert your printer's actual size bounds instead of those
       given above.  This will protect you against printing on some sizes not
       supported by your printer.

   Banner Printing
       Some printers support printing on continuous forms, also called banners
       or z-fold media.  Your printer's manual should tell you whether this is
       supported and in particular how to load these media.

       In order to print on continuous media with pcl3, configure it as

          •  Make sure that input position number -1 will be selected (see the
             subsection Media Sources And Destinations above).

          •  In the call to gs, select a subdevice supporting the intended
             "Big" size.  By default, only the subdevices hpdj680c, hpdj690c
             and hpdj1120c support banner printing (A4Big and LetterBig).

       Don't forget to prepare the printer as well.

   Correcting Offsets
       A media configuration file is intended to adapt pcl3 to the difference
       in margin settings between printer models and should usually contain
       "official" information, preferably taken from the model's manual.

       A different situation arises if a particular printer's output is not
       properly positioned on the page even if the margin information is
       correct for this model.  PostScript defines two arrays in the page
       device dictionary for correcting such misadjustments, both containing
       two numbers describing a desired shift of the page image with respect
       to device space coordinate axes but in different units.  The values in
       the `Margins' array are interpreted with respect to a canonical default
       resolution, the newer `PageOffset' array is taken to be in units of
       1/72 inch ("big points", bp).  For pcl3 the device coordinate system
       has an x axis pointing to the right and a y axis pointing downwards
       when looking at the sheet with the leading edge at the top and the side
       to be printed on towards you.  The canonical default resolution is 300

       As an example, assume your printer shifts its output 1 mm to the right
       and 0.5 mm upwards.  Now create a file containing either the PostScript

              << /Margins [-11.8 5.9] >> setpagedevice

       ("shift 11.8 pixels to the left and 5.9 pixels down") or

              << /PageOffset [-2.8 1.4] >> setpagedevice

       ("shift 2.8 bp to the left and 1.4 bp down") and have it executed by
       ghostscript before the file to be printed.

       The margin test files distributed with pcl3 can be used to determine
       the necessary correction.  You should be aware that you have to expect
       fluctuations between individual print jobs, in particular in the
       horizontal direction.

   Transfer Functions
       DeskJets usually produce prints which are too dark (too much ink on the
       page), most noticeably when using more than 2 intensity levels per
       colorant.  In this case you should perform gamma correction by
       modifying what PostScript calls transfer functions.  In the simplest
       case, create a file containing the PostScript command

              {number exp} settransfer

       where a good value for number is usually in the range 0.3-0.5, and
       specify this file in ghostscript's command line before the file you
       wish to print.  Now the intensities of all colorants will be rescaled
       by exponentiation with number.  Because PostScript intensity values are
       in the range zero to one with zero meaning dark and one meaning light
       (additive interpretation), a value of number < 1 will lead to lighter
       colours and number > 1 results in darker colours.

       The best value for number depends on the print quality, the number of
       intensity levels, the method chosen for intensity rendering, the kind
       of medium you print on, and the properties of the document to be

       Note that there is no common convention for the interpretation of
       stand-alone gamma values.  When dealing with other software you might
       for example find that the boundary between light and dark is at a value
       of 1000 and that lighter colours are obtained with larger values.  In
       order to understand what a "gamma value" means you therefore need the
       complete specification of the transfer function and, if the value does
       not refer to PostScript, also information on the interpretation of
       intensity values.

       You can also set independent transfer functions for the four colorants
       by using the operator setcolortransfer which expects four routines as
       arguments.  Consult a PostScript manual if you want to learn more about
       transfer functions.

       If you are using -sIntensityRendering=halftones, less than 32 intensity
       levels per colorant, a resolution below 800 ppi, and unless you
       explicitly set transfer functions, gs applies a default gamma
       correction roughly corresponding to a value of 0.8 for number.

   Ghostscript Version
       This manual page contains statements relying on undocumented properties
       of ghostscript.  These statements are to my best knowledge and belief
       correct for current ghostscript versions but I do not check all these
       statements for every new version.

       If you are in doubt about a particular point, please check it yourself.

       Hewlett-Packard does not publicly provide sufficiently detailed or
       accurate technical information to write a reliable driver for all of
       its PCL-3+ printers.  The amount and quality of available information
       differs between printer models.  As a consequence, pcl3 cannot provide
       the same level of reliability for all of its devices.

       In my opinion the best-documented printers are those of the DeskJet-500
       series.  In addition, I have currently access to a DeskJet 850C which I
       have used for a number of experiments.  Support for these printers
       should be considered to be the most reliable.

       The next level of reliability belongs to the remaining printers for
       which subdevices exist.  In these cases I had at least access to
       official HP documentation on supported media sizes and associated
       hardware margins and in addition for almost all cases some information
       on the supported PCL commands, sometimes complemented by PCL files
       generated by HP's official drivers and sent me by users.

       The third level of reliability is associated with those printers for
       which people have sent success reports but for which I have no official
       information from HP.

       With decreasing reliability it becomes increasingly probable that there
       is printer functionality which is not accessible through pcl3 or even
       that this driver generates PCL code not accepted by the printer.

   Mixed Resolutions
       Some printers are able to print with different resolutions for black
       and CMY on the same region of a page.  For example, the best quality on
       a DeskJet 850C is achieved with 600 ppi for black and 300 ppi for CMY.
       This is not supported by pcl3.

   Photo Cartridges
       From what I've heard, DeskJet printers with photo cartridges installed
       do not use a CMYK palette but instead one with 6 components.  I have no
       official information on this interface and even if I had it wouldn't
       help because ghostscript does not currently support DeviceN as a native
       colour space.

   Cartridge Alignment
       DeskJet printers with more than one ink cartridge present should
       usually be configured for the proper relative alignment of these
       cartridges.  Apparently, this information is stored in not-immediately-
       volatile memory in the printer together with some settings (like the
       default media size) which are not relevant for printing with pcl3.  As
       I do not have information on how this is done, you will need to use one
       of HP's programs for this purpose.

       On a Linux system, try installing and running HP's DOS DeskJet control
       panel DJCP in the DOS emulator.  DJCP should be present on one of the
       installation media you received with your printer.  One user managed to
       get this to work for a DJ 670C with DOSEMU 0.98 under RedHat 5.2 by

              $_ports = "0x378 0x379"

       in dosemu.conf.  I was not successful on my Debian system.

       The pcl3 distribution contains a file which you can print if
       you wish to check to which extent the cartridges are aligned.

       There are no known bugs in pcl3 proper, but there do exist restrictions
       or bugs in gs which can lead to faulty behaviour when printing with
       pcl3.  As far as I noticed them they are mentioned in the body of this
       manual page at the relevant points.

       You can find an up-to-date bug list for this driver via pcl3's home
       page on the Web.

       gs(1), pcl3opts(1)

       A First Guide to PostScript (link to URL

       Adobe Systems, PostScript Language Reference (link to URL .  Third
       edition, 1999.

       Copyright © 2000, 2001 by Martin Lottermoser, GreifswaldstraÃe 28,
       38124 Braunschweig, Germany.  E-mail:

       pcl3 has a home page (link to URL http://home.t-  on the Web.

       This is free software, released under the terms of the GNU Lesser
       General Public License (LGPL) (link to URL , Version 2.1.  USE IT AT YOUR
       OWN RISK.

       Version of this reference page: $Revision: 1.21 $ ($Date: 2001/08/18
       17:19:29 $).

pcl3 3.3                                                            GS-PCL3(1)