gs-hpdj
SYNOPSIS
gs [options] [files]
option ::= prn_option | hpdj_option
prn_option can be any option defined for ghostscript's prn
(printer) device. This includes all device-independent
options described in gs(1). You should also look into
ghostscript's extended documentation (file Use.htm/use.txt
and the section Device parameters in Language.htm/lan
guage.txt). hpdj does not support the Duplex parameter
and it determines the correct value for BitsPerPixel auto
matically.
hpdj_option ::= -dBlackLevels=integer |
-dCMYLevels=integer | -sColorMode=mode |
-sColourMode=mode | -dCompressionMethod=method |
-dDryTime=seconds | -dManualFeed[=boolean] |
-sMarginFile=pathname | -sMediaType=type |
-sModel=model | -sPagecountFile=pathname |
-sPrintQuality=quality
mode ::= mono | CMY | CMY+K | CMYK
method ::= 0 | 1 | 2 | 3 | 9
boolean ::= false | true
type ::= plain | bond | Premium | glossy | transparency |
photo | integer
model ::= 500 | 500C | 510 | 520 | 540 | 550C | 560C |
850C | 855C | unspec
quality ::= draft | normal | presentation | integer
Case is significant. Note that some options must be
passed as strings (-s) and others as general tokens (-d).
You should also keep in mind that gs effectively ignores
every option it does not recognize, hence some care in
spelling parameter names is necessary.
Some options have synonyms for values which are listed on
ly in the detailed description below.
DESCRIPTION
Scope
The ghostscript device driver hpdj is a ghostscript back
end for printers understanding Hewlett-Packard's Printer
Command Language, level 3+ (PCL 3+). It is intended to
support in particular the following printer models:
HP DeskJet 500
HP DeskJet 500C
HP DeskJet 510
HP DeskJet 520
PPA printer with ghostscript, but not through hpdj.
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 Model
option for which model the generated PCL code is intended.
The model-dependent difference in the generated code is
not great. Apart from margin specifications and colour
capabilities, one can consider three groups of models
which are treated with significant differences:
500,
5xx except 500 and 540,
540 and 8xx.
The third group is the one I refer to as the "new
DeskJets" below.
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 hpdj. You can specify one of the
supported models in these cases (it is sufficient to try
one each from the groups just mentioned), or use the spe
cial model name unspec which is treated like a new DeskJet
with all model-dependent checks having been turned off.
I have received reports that hpdj works with the following
printers:
HP DeskJet 340
HP DeskJet 500
HP DeskJet 500C (tested for mono only)
HP DeskJet 520
HP DeskJet 540
HP DeskJet 560C
HP DeskJet 600
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 850C
HP DeskJet 855C
HP DeskJet 870Cse/870Cxi
HP DeskJet 880C
HP DeskJet 890C
HP DeskJet 895Cse/Cxi
HP DeskJet 1100C
HP DeskJet 1120C
· printer model
· gs version
· hpdj version
· option combinations successfully tested (specify at
least model, resolution, colour mode and, if used, the
number of intensity levels)
· printer-specific functionality you could not access
So far I have not heard of a PCL-3+ printer which cannot
be driven by hpdj. Hence the really interesting part of
success reports is the list of working option combina
tions, but since I included the above request in this man
ual page in December 1997, hardly anyone has sent me such
a report. Possibly, users find this information unneces
sary.
Colour Modes
Ignoring photo cartridges, DeskJet printers can be classi
fied in four categories:
· The printer has only a black ink cartridge.
· The printer can print with either a black or a cyan/ma
genta/yellow (CMY) cartridge.
· The printer holds a CMY and a black cartridge simultane
ously, but the 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.)
· The printer holds a CMY and a black cartridge simultane
ously and the inks can be mixed.
This leads to four colour modes for the driver:
mono: Print in black.
CMY: Print in cyan, magenta and yellow only. 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.
Depending on the category of the model chosen, the driver
will accept one or more of these modes. The possibilities
are:
ty. For older DeskJets (500, 500C, 510, 520, 550C and
560C), similar effects can be achieved by specifying some
technical aspects of the printing process in detail.
The hpdj driver accepts only the new Media Type and Print
Quality specifications as options. For printers not un
derstanding the new commands, these specifications are
mapped to the older Depletion, Shingling, and Raster
Graphics Quality commands based on recommendations from
HP.
Media Sizes and Orientations
Ghostscript looks at several sources to determine the page
size for a document:
· the default size set for gs (usually US Letter or ISO
A4)
· the value given to -sPAPERSIZE in the invocation
· the size requested by the document, unless you specify
-dFIXEDMEDIA
The last applicable item in this list overrides the oth
ers.
The driver knows which media sizes are supported by each
printer model and will refuse to print if an unsupported
one is requested. The model unspec normally accepts all
sizes, and it assumes the printer to understand all size
commands which can be sent to one of the supported se
ries-800 DeskJets. This can be changed with a margin file
specification; see the CONFIGURATION section below for de
tails.
Each supported size is available in portrait and landscape
orientation. Media should however always be put into the
input tray independent of the intended orientation.
Ghostscript and hpdj will take care of the rest. Hewlett-
Packard's information on the required orientation of media
in the input tray is not quite clear, but hpdj assumes it
to be always "short edge first" with respect to the feed
ing direction. You should check your printer's manual
whether this is correct, in particular if you have a
DeskJet 400, 500 or 500C and wish to print on envelopes.
Note that hpdj has no information about the dimension or
orientation of the medium in the input tray: you must en
sure yourself that this is appropriate.
In setting up the PostScript default user space, hpdj does
not treat envelope sizes differently.
Diagnostic Messages
Error messages issued by hpdj start with "? Device hpdj:",
lected accepts the given resolution unless the model
is unspec. Resolutions supported by at least some of
the models in some of the colour modes are 75, 100,
150, 300 and 600 ppi. Only unspec permits unequal
horizontal and vertical resolutions. For this case
read the subsection on the Configure Raster Data com
mand in the LIMITATIONS section below first. The de
fault resolution for hpdj is set at compile time, usu
ally to 300 ppi.
The following options are specific to hpdj:
-dBlackLevels=levels and -dCMYLevels=levels
Warning! These options are not based on HP documenta
tion! Read the subsection on the Configure Raster Da
ta command in the LIMITATIONS section below before us
ing them.
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 mode. They permit access to the Colour
Resolution Enhancement technology (C-REt) feature
available in some series-800 DeskJets. The defaults
are 0 or 2, depending on the colour mode chosen. Oth
er values are only accepted for the models 850C, 855C
and unspec. I strongly suggest that you apply gamma
correction and modify the halftone screens whenever
you use non-default values for these options (see the
CONFIGURATION section below).
unspec accepts any non-negative number of levels ex
cept 1 up to 256. The models 850C and 855C accept the
levels 0, 2, 3 and 4 with the following restrictions
if any of the levels is larger than 2:
· You can't use this feature with draft quality.
· You can't use a colour mode of CMY.
· You must use a resolution of 300 ppi.
· If you are using a non-monochrome mode, you must
use 4 levels for black.
When using the model unspec you should expect the
printer to similarly limit the possibilities. So far
I have not heard of a PCL-3+ printer supporting more
than four intensity levels per colorant.
Unfortunately, there is a problem here because
ghostscript's internal colour model is not prepared
for the situation where a device can render different
small (< 32) numbers of intensity levels for different
colorants. In this situation gs will in general as
sume that the number of black levels available is
equal to that for CMY levels. Depending on which of
the model, see Colour Modes 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 all oth
er situations you must ensure yourself that colour
mode and intensity levels are consistent or hpdj 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 Process
ColorModel will not be correct for a colour mode of
CMY or CMY+K.
-dCompressionMethod=method
PCL interpreters understand several compression meth
ods 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)
3 Delta Row Compression
9 Compressed Replacement Delta Row Encoding
The default method is set at compile time, usually to
9. Requesting method 3 actually leads to a combina
tion of methods 2 and 3. The DeskJet 500 does not
support method 9. 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 ab
solute values change, the relative order of efficiency
between the methods is usually the order of increasing
method. In short: use method 9 (3 for the DeskJet
500).
-dDryTime=delay
With the exception of the DeskJets 500 and 500C,
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 newer
DeskJets although it is still supported by some of
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 except for series-500
DeskJets printing on envelope sizes when it is true.
Note that for current ghostscript versions this set
ting is independent of the value of the PostScript op
erator manualfeed in statusdict. If you want to set
manual feeding from the PostScript code you must
therefore use the ManualFeed entry in the page device
dictionary.
-sMarginFile=pathname
This option must specify an existing file containing a
list of supported media sizes and corresponding margin
descriptions for the printer. This will take prece
dence over the builtin model-specific lists of sizes
and margins. The format of the file is described in
the CONFIGURATION section below. The default is not
to use a margin file but the builtin lists. This op
tion is primarily intended to be used with the model
unspec.
A margin file path can also be specified at compile
time overriding the default behaviour for unspec only.
Using the MarginFile option in addition will override
the compiled-in margin file path.
-sMediaType=type
This option selects (you guessed it) the type of medi
um you wish to print on. The possible choices are:
0 plain paper
1 bond paper
2 HP Premium paper
3 glossy paper
4 transparency film
5 photo paper
The default is plain paper. For type, you can specify
the full strings, the 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 it is a model un
derstanding the PCL command "Media Type". If it
isn't, the effect is the same as specifying plain pa
per. The value 5/photo paper is only understood by
some recent DeskJets (e.g., the DeskJet 690C) and will
be ignored by older ones.
-sModel=model
This option identifies the printer model for which the
unspec is intended to be a stop-gap for DeskJet-com
patible printers not presently supported by this driv
er. For unspec, all model-specific checks (e.g., sup
ported 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 use the MarginFile 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 at 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 colour and pix
el, the printer must in addition understand the Con
figure Raster Data command. Read the subsection on
that command in the LIMITATIONS section below.
If you choose to use unspec it is your responsibility
to ensure that hpdj is only called with parameter val
ues the printer can handle. This applies in particu
lar to the resolution and the intensity levels.
-sPagecountFile=pathname
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 in
teger. In the first case, hpdj will create the file
and insert the number of pages processed, in the sec
ond case the number will be incremented by that
amount. Parallel invocations of gs are permitted to
use the same file. hpdj will also make the initial
page count available in its page device dictionary.
Note that in present ghostscript versions the
PostScript operator pagecount in statusdict always re
turns 4711 and is not based on the value of PageCount
in the page device dictionary.
This option is mainly intended for spooler backends
calling hpdj. It can be used to keep track of the to
tal number of pages printed and also for per-job ac
counting. I recommend using this option for the first
purpose and to make a note of the values in the re
sulting files whenever you insert a new ink cartridge.
This will enable you to get an indication of how much
a printed page costs and why it is a good idea to use
draft quality whenever possible.
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.
it is a model understanding the PCL command "Print
Quality". If it isn't, the effect is the same as
specifying normal.
Looking up Compile-Time Defaults
Some default values for options can be chosen at compile
time. If you later want to know these values, run gs on
the following PostScript code:
currentpagedevice
dup /Name get (hpdj) eq not
{
(ERROR: You have not selected the hpdj driver.) =
}
{
(Model: ) print
dup /Model get =
(Resolution: ) print
dup /HWResolution get ==
(Compression method: ) print
dup /CompressionMethod get =
(Margin file: ) print
dup /MarginFile get
dup () eq
{pop (none)} if
=
(PagecountFile is ) print
dup /PagecountFile known not
{(not ) print} if
(supported.) =
} ifelse
pop
quit
Note that this will not necessarily return the compile-
time defaults but only the values current at the time of
execution. Therefore you should not specify any options
except -sDEVICE=hpdj and, if your ghostscript executable
has been compiled without a default model for hpdj or if
you want to find out whether there is a compiled-in margin
file path, -sModel=unspec. You should also make sure that
you have not set environment variables modifying
ghostscript's behaviour.
CONFIGURATION
Margin Description File
A margin description file (margin file for short) can be
choose a larger and printer-supported size in PostScript
or via -dFIXEDMEDIA, shift the image if necessary, estab
lish properly-positioned clipping regions within the real
size, and print. However, if you have a newer DeskJet
supporting custom page sizes, this is not necessary (see
below).
Margin specifications are important for two reasons: the
values for the left and top margins determine how the out
put is positioned on the page, and sufficiently large val
ues 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 often
have an inconveniently large bottom margin (usually
0.4-0.8 inches or 10-20 mm), one might be tempted to spec
ify 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 page. Specifying a smaller margin on the right is in
contrast probably harmless because, according to HP,
DeskJet printers always clip at that margin.
A line in the margin file can be blank, a comment line
(first non-blank character is '#'), or one of the follow
ing:
unit unit
code left bottom right top
A unit line specifies in which units margin specifications
in the following lines should be interpreted. unit can be
either in or mm with in being the default. A unit speci
fication remains in force until overridden by a following
unit line.
The second kind of line states that the model supports a
particular page size, identified by its PCL page size
code, and specifies the margins in force for that size
when printing in black, in raster graphics mode, and in
portrait orientation for the medium (width <= height). Be
careful with envelopes: older (pre-1997) HP documentation
frequently gives their margins in landscape orientation;
you can check this by looking for the largest margin val
ue: in portrait orientation it should be at the bottom.
The margins have to be specified as floating point numbers
in inches or millimetres as announced by the last preced
ing unit line. The floating point format is that of the
"C" locale. Depending on the model, hpdj will either as
sume that the same margins apply for colour printing (this
is the case for unspec) or increase the bottom margin by a
model-specific amount in that case.
27 ISO/JIS A3 (297 × 420 mm)
*45 JIS B5 (182 × 257 mm).
This is distinct from ISO B5 (176 × 250 mm).
46 JIS B4 (257 x 364 mm).
This is distinct from ISO B4 (250 × 353 mm).
*71 Hagaki card (100 × 148 mm)
*74 US index card 4 × 6 in
*75 US index card 5 × 8 in
*81 US no. 10 envelope (4.125 × 9.5 in).
*90 ISO DL envelope (110 × 220 mm)
*92 ISO C6 envelope (114 × 162 mm)
*101 custom page size
109 US A2 envelope (4.375 × 5.75 in)
The page size code 101 (custom page size) is not under
stood by older printers and may be used in a margin file
only for the models 540, 850C, 855C, and unspec. 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. hpdj will tell the printer to expect a custom
page size only if there is no fitting discrete entry.
Every margin 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 accept
ed by hpdj.
hpdj is distributed with an example of a margin descrip
tion file, example.mdf.
PostScript Configuration File
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 files
in the invocation and executes 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.
The hpdj distribution contains an example of an input fil
ter if-hpdj for the BSD spooler lpr(1) permitting the use
of a print-queue-specific configuration file.
Correcting Offsets
A margin description file is intended to adapt hpdj 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
OPTIONS section above).
As an example, assume your printer shifts its output 1 mm
to the right and 0.5 mm upwards and the default resolution
of your version of hpdj is 300 ppi. Now create a file
containing either the PostScript code
<< /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. If
you specify both, Margins and PageOffset, the total shift
performed by gs will be the sum of the two.
The file align.ps in the ghostscript distribution or the
margin test files distributed with hpdj can be used to de
termine the necessary correction. You should be aware
that you have to expect fluctuations between individual
print jobs, in particular in the horizontal direction.
Gamma Correction
DeskJets usually produce colour prints which are too dark
(too much ink on the page). In this case you should per
form 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 intensi
ties 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 mean
ing light (additive interpretation), a value of number < 1
will lead to lighter colours and number > 1 results in
darker colours.
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.
For a device with less than 32 intensity levels per col
orant, at resolutions below 800 ppi, and unless you ex
plicitly set transfer functions, gs applies a default gam
look the same. This is what seems to happen if one prints
with 4 intensity levels for CMY on plain paper with a
DeskJet 850C: the fourth level is accepted by the printer
but to me it looks indistinguishable from the third.
In this situation we can compensate for ghostscript not
correctly dealing with different numbers of black and CMY
intensity levels by using PostScript's transfer functions.
The idea is to specify in the invocation the higher number
of levels for both, black and CMY, but to map the range
for those components where actually only a smaller number
of levels is distinguishable to a reduced range which gs
will divide into the required (smaller) number of inter
vals. Although the printer will be told to expect the
higher number of intensities, it will never receive them.
However, if the assumptions above are correct, the highest
level it does receive will anyway look like the highest
level possible!
For the case of 4 black and 3 intended CMY levels the CMY
intensities must be remapped from the range [0, 1] to the
range [1/3, 1]. Here's the code, including an equal gamma
value number for all four components:
{number exp 2 mul 1 add 3 div}
dup dup
{number exp}
setcolortransfer
In the call to gs you must now specify a value of 4 for
both, BlackLevels and CMYLevels.
Halftoning
Most printers offer only a small number of intensities per
colorant and pixel. In order to generate a larger range
of colours, one therefore employs halftoning which con
sists of dividing the pixel array into halftone cells,
each of which represents one effective pixel which can now
display more shades. This method trades resolution for
the number of shades and applies to all structures which
have to be painted with a colour which cannot be repre
sented exactly. At 300 ppi and with a bi-level device a
typical choice is to use halftone cells of 5×5 pixels
leading to an effective resolution of 60 ppi and 26 shades
per component. These are also ghostscript's default val
ues at 300 ppi.
Which kind of halftoning is appropriate depends not only
on the printer but also on the document to be printed.
For this reason PostScript offers access to the halftoning
parameters. You should use this feature in particular if
your printer supports more than two intensity levels be
currenthalftone dup /HalftoneType get 2 eq
{
begin
/RedFrequency frequency def
/GreenFrequency frequency def
/BlueFrequency frequency def
/GrayFrequency frequency def
currentdict
end
sethalftone
}
{pop} % Not prepared for this case.
ifelse
For general applications, reasonable values for frequency
on a 3- or 4-level device at 300 ppi are 75 and 100. You
can use the file colorcir.ps in the ghostscript distribu
tion to gain some impression of the effects on the size of
halftone cells and the number of shades you can distin
guish. Consult a PostScript manual if you want to learn
more about how to specify halftones.
If you are using the colour mode 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 dictio
nary) 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 compo
nents to achieve this. Note that ghostscript installs
separate halftone screens for CMYK devices by default if
the resolution is at least 150 ppi.
LIMITATIONS
Ghostscript Version
This manual page contains statements relying on undocu
mented features of ghostscript. These statements are to
my best knowledge and belief correct for at least
ghostscript 5.50, and I hope I've not missed significant
deviations when testing with older versions. But I can't
of course guarantee anything for newer ones.
The Rendering Algorithm
In ghostscript's internal architecture the ghostscript
kernel calls on a device driver for basic drawing opera
tions and to ship out completed pages. For most if not
all print devices this process can be separated into ren
dering in memory and transferring the resulting array of
I do not claim that this leaves nothing to be desired.
For example, there is no possibility in this implementa
tion to perform Floyd-Steinberg dithering. Of course, one
can implement error diffusion in a ghostscript device
driver and a number of people have done so in printer-spe
cific backends. I do not believe, though, that such an
implementation belongs there: it should better be imple
mented in an improved rendering device. In that way, it
could be used for other printer-specific backends as well.
This is also true for every other kind of modification of
the rendering process. I have therefore deliberately re
stricted hpdj to be a "purely printing" backend: it knows
about PCL but not about rendering.
Therefore, if you need better visual quality for documents
with shades of grey or non-primary (non-CMYK) colours,
this cannot be achieved by giving some tricky combination
of option values to hpdj. Instead you should experiment
with the relevant PostScript operators (see chapter 6 of
the PostScript Language Reference), or ultimately extend
ghostscript's prn device.
The Configure Raster Data Command
There is a new PCL-3+ command called "Configure Raster Da
ta" for which until recently I had not been able to obtain
documentation. This command is apparently the basis for
supporting unequal resolutions in horizontal and vertical
directions and for HP's Color Resolution Enhancement tech
nology (C-REt). Some option values supported by hpdj lead
to Configure Raster Data being used and must therefore be
considered unsafe!
At least some of the series-500 DeskJets as well as newer
models claim to permit unequal resolutions in horizontal
and vertical directions, in particular 600 × 300 ppi. The
corresponding implementation in hpdj, available only for
the model unspec, is based on Configure Raster Data. It
seems to work at least for the DeskJet 690C; it does not
work for the DeskJet 870C (see below). I would however
strongly advise against using these resolutions for print
ing on a series-500 DeskJet because, 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 re
striction. In addition, it is likely that the higher res
olution is anyway only supported for the printer's builtin
fonts and not for general raster data.
Concerning the DeskJet 870C, my impression is that al
though some HP documents and drivers use expressions like
"600x300 dpi C-REt color" for this printer, the model does
know, this capability is only available in series-800
DeskJets and it has to be accessed by Configure Raster Da
ta. The implementation of non-default values for hpdj's
options BlackLevels and CMYLevels is therefore based on
Configure Raster Data. It works at least with the
DeskJets 850C, 870C and 890C.
Performance for Larger Numbers of Intensity Levels
This could be improved by replacing some generic routines
by more specialized ones for particular parameter values.
There does not seem much sense in doing this, though, un
til I know that the code in question is needed for some
printer model.
Mixed Resolutions
Newer DeskJets are able to print with different resolu
tions 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 also
due to the new Configure Raster Data command and is not
supported. I suspect that implementing this really well
in ghostscript is not a simple task and probably requires
modifying the ghostscript kernel.
Photo Cartridges
From what I've heard, DeskJet printers with photo car
tridges installed do not use a CMYK palette but instead
one with 6 components. I have no official information on
this interface and ghostscript currently does not 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 informa
tion is stored in not-immediately-volatile memory in the
printer together with some default settings like the de
fault media size which are not relevant for printing with
hpdj. As I do not have information on how this is done,
you will need to use one of HP's programs for this pur
pose.
On a Linux system, try installing and running HP's DOS
DeskJet control panel DJCP in the DOS emulator. I did not
get it to work, but you might have more luck (or skill).
DJCP should be present on one of the installation media
you received with your printer.
FUTURE DIRECTIONS
I intend to release a new version in a few months for
which I am going to change the name of the driver from
SEE ALSO
gs(1)
Adobe Systems
PostScript Language Reference
Third edition, 1999.
A First Guide to PostScript
http://www.cs.indiana.edu/docproject/programming/
postscript/postscript.html
Hewlett-Packard
Technical Reference Guide for the HP DeskJet 500 Series
Printers
First edition, October 1994. Manual Part Number:
C2170-90099.
Unfortunately, this guide does not describe all valid
commands. I was told in October 1997 by the German firm
distributing HP manuals that there is no newer HP manual
on PCL 3 and that they had even considered writing one
themselves for this reason.
AUTHOR
Copyright © 1996, 1997, 1998, 1999 by Martin Lottermoser,
Metzgerfeldweg 9, 85737 Ismaning, Germany.
E-mail: martin.lottermoser@mch20.sbs.de.
This is free software, released under the terms of the GNU
Library General Public License (LGPL), Version 2. USE IT
AT YOUR OWN RISK.
hpdj has a home page at ftp://ftp.sbs.de/pub/graphics/
ghostscript/pcl3/pcl3.html. The source code for the driv
er is available in the same directory, file hpdj-ver
sion.tar.gz. You should, however, keep in mind that the
name of the driver will change in the future (see FUTURE
DIRECTIONS) and this will of course be reflected in the
names of files.
hpdj 2.6 1999-10-16 GS-HPDJ(1)
|