PostScript Printer Description File Format Specification
PostScript Printer Description File Format Specification
So ft w ar e Fro m Ado b e
PostScript Printer
Description File Format
Specification
Adobe Developer Support
Version 4.3
9 February 1996
PN LPS5003
Contents
Introduction
1.1
1.2
Syntax of Specification
4.1
4.2
4.3
4.4
4.5
Format
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
32
General Syntax 32
Sample Keyword Statements 34
Elementary Types 36
Standard Option Values for Main Keywords 38
Summary of Rules for *Default Keywords 40
Keywords
5.1
5.2
5.3
5.4
5.5
5.6
5.7
41
iii
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
6
7.1
153
166
176
UI Keywords 181
Repeated Keywords
179
181
182
183
184
199
iv
Contents
81
209
213
(9 Feb 1996)
Introduction
PostScript printer description files (PPD files) are text files that provide a
uniform approach to using the diverse features of devices that contain PostScript interpreters. Such features include different page sizes, different methods of paper and film handling, memory size, font availability, and finishing
features such as duplex printing and stapling. All devices do not have the
same set of features, and even devices with the same features do not necessarily invoke those features in the same way. PPD files provide applications with
the necessary information about a devices features, including the feature
options, the default settings, how to request the current settings, how to
change the settings, and other information that might be used for scheduling
jobs.
In this specification, the term device means any output device containing a
PostScript interpreter, such as a printer, imagesetter, or film recorder. Each
device has a PPD file associated with it. The PPD files for all devices that are
accessible to a given host computer are stored on that host computer. Applications on the host computer can then parse PPD files to discover the list of
features available on a device. PPD files contain structures that allow blind
parsing of a list of features. Applications can parse for these structures without understanding the features they contain. Applications can then build a
user interface from the list of features found in the PPD file for the selected
device.
The PPD file also contains the PostScript language code to invoke each feature. In this specification, the term output file refers to the file containing the
PostScript language description of the document composed by the user.
When a user selects a feature from the user interface, such as manual feed or
duplex printing, the code for each selected feature is extracted from the PPD
file and included in the appropriate place in the output file before the output
file is sent to the device.
Local customizations to a PPD file can be added at the user site to accommodate changes to the printer, such as the addition of fonts or memory, or to
configure a device a certain way (for example, to always print in duplex).
There is a close relationship between PPD files and the Adobe Systems document structuring conventions (also known as DSC). These comment conventions can be used in an output file to identify the code that invokes devicespecific features. This allows the output file to be redirected from one device
to another by a spooler or other post-processing software. As an output file is
routed across a network, a spooler can extract device-specific code by parsing
for the associated DSC comments. The spooler can then parse the PPD file
for the new device, extract new device-specific code, and insert that code into
the output file before routing the file to the new device.
Every piece of code that is extracted from a PPD file and inserted into an
output file should be enclosed by the appropriate DSC comments. Version 3.0
of the Document Structuring Conventions specification is documented in
Appendix G of the PostScript Language Reference Manual, Second Edition.
Any later versions of this specification can be obtained from the Adobe
Developers Association.
1.1
(9 Feb 1996)
1.2
Definition of Terms
This section defines many of the terms used throughout this specification.
There are two basic types of keywords in a PPD file: main keywords and
option keywords. Main keywords denote a device feature, such as the set of
available page sizes (*PageSize) or input slots (*InputSlot).
Option keywords, which modify main keywords, describe the list of available
options for a feature. For example, the option keywords for the main keyword
*PageSize describe the available page sizes, such as Letter, Legal, A4, Tabloid, and
so on. The option keywords for the main keyword *InputSlot describe the available input slots, such as Upper, Lower, and so on.
Two subsets of the main keyword class are default keywords and query keywords. Default keywords provide information about the default state of the
device as shipped from the factory. Default keywords share the root name of a
main keyword, as in *DefaultPageSize and *PageSize. When discussed as a class
of keywords, default keywords are also referred to as *Default keywords,
because *Default is always their prefix. A stand-alone default keyword is one
that appears in the PPD file without its related main keyword (for example,
*DefaultResolution without *Resolution).
A query keyword provides a code sequence, which, when downloaded to the
device, returns information about the current state of the device. This can be
used by applications to determine the state of a device and perhaps request
operator intervention (for example, if the appropriate media tray is not
present). Note that queries can only be used when the physical interface to
the device permits feedback from the device. Also, queries must be emitted in
a query job that immediately precedes the print job. Among other things,
this allows spoolers to process queries without processing the actual print job.
(See the DSC specification for a description of query jobs.)
Not every main keyword has an associated query keyword. Query keywords
have been defined only if they are possible and useful, and are completely
optional.
A statement is a single instance of a main keyword, option keyword (if any),
and value. There are seven formats for statements:
1. *MainKey
2. *MainKey: StringValue
3. *MainKey: "QuotedValue"
4. *MainKey: ^SymbolValue
1 Introduction
(9 Feb 1996)
A hexadecimal substring is used to represent out-of-range byte codes in certain data types (see section 3.5). A hexadecimal substring consists of a
sequence of zero or more pairs of hexadecimal digits, preceded by the < (less
than) character (decimal ASCII 60) and followed by the > (greater than) character (decimal ASCII 62). Hexadecimal digits consist of the characters 0
through 9, a through f, and A through F (case is insignificant). Spaces and
tabs can be intermixed with the hexadecimal digits and should be ignored.
Newlines may occur and should be ignored, except in translation strings,
where they are illegal. See section 3.5 for the treatment of newlines in translation strings. All other characters should be considered an error. An odd
number of hexadecimal digits is also an error.
Note
This specification does not address the uses of PPD files at document composition time. For information about using a PPD file at document composition
time, see Technical Note #5117, Supporting Device Features.
At print time, the selected PPD file can be used to construct a user interface
that displays the available features of the requested device, such as duplex
printing or manual feeding. The default values for those features can be
obtained from the PPD file. Where applicable, there is also code that can be
used to determine the current settings of features (known as querying the
device). After the user selects various printing features, the code to invoke
those features can be extracted from the PPD file and inserted into the output
file.
Finally, PPD files for other devices can be used by a post-processor, such as a
spooler, to insert new device-specific code into the output file and route the
file to a different device. More detail on the use of PPD files in each phase of
document production is provided in the next few sub-sections.
In this specification, the application that parses the PPD file for device features and provides the print panel function is referred to as a print manager.
Often, it is the same piece of software that converts an applications internal
representation of a document to the PostScript language representation of the
same document. The function of the print manager might be provided by a
system-level driver, by a separate piece of software, or it might be part of an
application.
Among its other duties, the print manager
takes input from the user via some user interface, such as a print panel or
command line,
extracts from the PPD file the corresponding code sequences to invoke the
requested features,
inserts the code sequences into the appropriate setup section of the output
file, and
surrounds the code sequences with the appropriate DSC comments.
2.1
At print time, a user must be able to select various device features, such as
paper size or manual feed, through a user interface such as a print panel or a
command line. The features offered to the user by a print panel can be constructed by parsing the PPD file for the selected device, discovering the available features, and displaying them to the user for selection. For example, the
PPD file contains a list of paper sizes supported by the device. A user interface can display that list to the user and allow the user to select a paper size
from the list.
The PPD file also contains information about the default state of the device as
it is shipped from the factory. The default state of the device can be used as a
starting point for setting the initial state of the user interface. For example,
the default state of optional accessories can be used to indicate whether or not
those accessories are installed, and, therefore, whether or not to display them
to the user.
Second, the default state of individual features can be used to determine how
they are initially displayed. For example, if the default state of the device is to
print on letter-size paper with manual feed turned off, the user interface could
initially appear with letter-size paper selected and manual feed not selected.
(9 Feb 1996)
This tells the users that if they change nothing, their documents will be
printed on letter-size paper and the paper will be drawn from a tray other than
the manual feed tray. The PPD file can thus be used to tell users both what
they can do and what will happen if they do nothing.
It is important to realize that the defaults in the PPD file do not necessarily
reflect the current state of the device, as a system manager or a previous job
could have changed the state of the device. It is also important to realize that
a print manager is not required to use the PPD defaults as an initial starting
point for display. Some print managers save the users previous job settings
and use those as initial settings, rather than using the devices default settings.
2.2
When the user has finished selecting features, the print manager can consult
the PPD file for additional information, such as
whether this is a Level 1 or a Level 2 device, so the print manager knows if
it can generate code that uses Level 2 features
if it is a Level 1 device, which extensions to the PostScript language are
supported, if any
the code sequences that invoke the features the user has selected via the
user interface
any additional information that the author of the print manager thinks
would be useful in generating an efficient output file.
Armed with information, the print manager converts the internal representation of the document into the PostScript language representation of the document. It includes the device-specific code for the features requested by the
user, and surrounds these feature requests with DSC comments for possible
later parsing by other applications.
The following example shows a PostScript language output file that describes
a very small document. The output file does not yet contain DSC comments
or device-specific code. Throughout this section, this output file will grow as
DSC comments and device-specific code are added.
/sp /showpage load def
100 100 translate
20 50 moveto
20 100 lineto
stroke
sp
In the next example, assume that the user requested letter-size paper via some
user interface. The print manager extracts from the PPD file the device-specific code to invoke letter-size paper, inserts the code into the output file,
inserts the appropriate DSC comments, and sends the output file to the output
device.The following is the example with the DSC comments and the devicespecific code added.
%!PS-Adobe-3.0
%%Title: test.ps
%%EndComments
/sp /showpage load def
%%EndProlog
%%BeginSetup
%%BeginFeature: *PageSize Letter
statusdict /lettertray get exec
%%EndFeature
%%EndSetup
%%Page: one 1
100 100 translate
20 50 moveto
20 100 lineto
stroke
sp
%%EOF
When the output file is sent to the output device, the interpreter ignores the
comments and executes the PostScript language commands, including the
code sequence that sets up the letter-size input tray.
For most user-selectable features of a device, there is no clear inverse operation. That is, unsetting, for example, a ledger-size paper tray will typically
mean establishing a different paper tray as the current paper tray. Explicitly
setting the device back to its default condition has the same effect; it will
undo the effects of having previously set a given feature. Unless there is a
specific reason to do so, it is not necessary to reverse the effects of invoking
device-specific features for any particular print job, since the job server
should provide that service, returning device features to their default settings
at the end of each job.
2.3
Post-Processing
(9 Feb 1996)
The following is the example file as it is sent to the new device (note that the
device-specific code is different):
%!PS-Adobe-3.0
%%Title: test.ps
%%LanguageLevel: 2
%%EndComments
/sp /showpage load def
%%EndProlog
%%BeginSetup
%%BeginFeature: *PageSize Letter
(<<) cvx exec /PageSize [612 792] (>>) cvx exec setpagedevice
%%EndFeature
%%EndSetup
%%Page: one 1
100 100 translate
20 50 moveto
20 100 lineto
stroke
sp
%%EOF
2.4
Error Handling
appears before the %%BeginFeature: comment line, and that this line
}stopped
and the lines following it appear after the %%EndFeature line. Otherwise, these
lines of code could be removed by a print manager replacing the code
between the %%BeginFeature and %%EndFeature comments.
2.5
Order Dependencies
When a print manager is inserting device-specific code into an output file, the
order of certain operators with respect to each other is important and must be
considered. The keywords *OrderDependency and *NonUIOrderDependency,
described in section 5.2, provide information about the appropriate setup section (described in the DSC) and relative ordering of each PostScript invocation. If a print manager is not coded to read the *OrderDependency and
*NonUIOrderDependency statements in a PPD file, it must take care of the proper
ordering of the code fragments by itself.
10
(9 Feb 1996)
11
One approach to system management is for a print manager to parse all of the
PPD files available on a host system and store the data into a database. The
print manager (or other utilities) can then query the user or the device or
watch for system changes and update the database dynamically to reflect
additional memory, fonts, available trays, and other changeable printer features.
A less dynamic approach is provided in this specification by local customization files, which contain only the changed or added items and a reference to
the primary PPD file. In a given computing environment, there is usually one
PPD file for each type or model of device in use. For example, there may be
seven Acme FunPrinters in the system, but there is usually only one Acme
FunPrinter PPD file, which is shared by or copied onto each host computer in
the system. However, if applications or users want to add to or modify the
contents of a PPD file, they can create a local customization file for a specific
instance of a device or for use by a particular application.
For example, a computing environment might contain a primary PPD file that
describes a generic Acme FunPrinter. If the FunPrinter in Room 13 has additional memory, and if the system does not provide utilities for querying the
user or watching the state of the printer, then the system administrator might
want to create a local customization file for the FunPrinter in Room 13 that
reflects the presence of additional memory. (This is better accomplished by
the use of *InstalledMemory in the primary PPD file, if the print manager supports it.) Or, if an application developer wants to add application-specific
entries to a PPD file for a particular printer model, he would do so by creating
a local customization file that would be used only by that application. For
example, a color-intensive application might want to parse a PPD file for
halftone information and add complementary halftone screens to a local customization file.
The local customization file should generally contain only entries only for
items that are changed or added. However, to be understood by applications
parsing PPD files, the local customization file must conform to the PPD specification, so in a sense, the local customization file is a minimal PPD file. The
minimal set of required keywords listed in section 3.8 must be included at the
beginning of the file, so print managers can recognize it as a PPD file. Other
keywords that are marked Required in this specification, such as *PageSize, are
not required in the local customization file, unless they are being customized.
The customization file should be given a unique name that represents a particular device (for example, MyPrntr.PPD). The .PPD extension should be
preserved, with case irrelevant, in case applications or print managers are
searching for files with that extension. Application developers can also create
customization files with different extensions, which are read only by their
application.
12
(9 Feb 1996)
The local customization file must contain a reference to the primary PPD file
in this format:
*Include: "filename"
where filename is the name of the primary PPD file. This referencing allows a
system administrator to later replace the primary PPD file without forcing
users to edit their local customization files. If the new primary PPD file has
the same name as the old one, it will automatically be referenced by the local
customization file.
Before creating a local customization file, a system administrator should
make sure that computing environment provides support for the concept.
Some print managers might not process the *Include statement, or the system
might not provide a way to install both the primary PPD file and the local
customization file.
When a primary PPD file is included by a local customization file, the parsing details change somewhat. In particular, there might be several instances
of the same keyword in the composite file. In this case, the first instance
of a given keyword (or, if the keyword takes an option, of a keywordoption pair) is correct. This enables a parser to ignore subsequent versions
of the same statement, possibly reducing the parsing time.
Because the first instance of a keyword is the correct instance, all keywords
in a local customization file should occur before the *Include statement that
references the primary PPD file.For example, assuming the primary PPD file
is called TIMICRO1.PPD, a local customization file might look like this
*% Local Customization File for TI microLaser
*FreeVM: "1907408"
*Include: "TIMICRO1.PPD"
*% end of local customization file
13
The concept of first instance is correct does not apply to certain keywords
that normally have multiple instances in a PPD file, and which do not have
option keywords to distinguish those instances. For example, *UIConstraints and
*PrinterError occur multiple times in a PPD file, with different values, but with
no option keyword to distinguish one instance from another. In these cases,
all instances must be parsed and recorded. This implies that a parser must
either know the semantics of PPD keywords when parsing, or it must save all
instances in some form for a later, smarter processor to decide which are
rightfully multiple instances. See Appendix A for a list of optionless keywords
that might occur multiple times in a file.
Using and Changing Default Settings
When building a user interface from a PPD file, a print manager can use the
*Default keywords to choose defaults for the features displayed to the user. For
example, if the PPD file for the selected device contains this statement:
*DefaultManualFeed: False
then the print manager can indicate in the user interface that manual feeding
of the media is, by default, turned off, and provide a way for the user to turn
on manual feeding.
The defaults listed in the original PPD file reflect the state of the device when
it is shipped from the factory. If the system administrator wants to set up the
device differently, the new defaults should be included in the local customization files. For example, if the device in the previous example was set up to
always feed from the manual feed slot, then the local customization file
should contain the entire *ManualFeed entry, copied from the original PPD file,
with the value of *DefaultManualFeed changed from False to True:
*OpenUI *ManualFeed: Boolean
*OrderDependency: 20 AnySetup *ManualFeed
*DefaultManualFeed: True
*ManualFeed True: code
*ManualFeed False: code
*?ManualFeed: query code
*CloseUI: *ManualFeed
This allows the print manager to indicate in the user interface that manual
feeding of the media on this device is, by default, turned on.
14
(9 Feb 1996)
Format
The syntax of PPD files is a simple line-oriented format where the options,
defaults, and invocation strings (PostScript language code sequences that
change a feature setting) are made available through a regular set of keywords.
3.1
The following are parsing rules that apply to the PPD file as a whole:
Any line that exceeds 255 characters in length is an error.
Any byte code that is not in the following list is an error: decimal 32
through decimal 255 inclusive, plus decimal 9 (ASCII horizontal tab), decimal 10 (ASCII line feed), and decimal 13 (ASCII carriage return).
3.2
Main Keywords
All main keywords start with the leading special character * (decimal 42).
This makes recognition of keywords easier, and reduces the possibility of
keywords being confused with PostScript language identifiers in code
sequences.
Query keywords start with the leading characters *?, differentiated from other
main keywords by the presence of the ? character (decimal 63).
Default keywords start with the prefix *Default, as in *DefaultPageSize. Where
applicable, there is a relationship between the three kinds of main keywords,
as in *PageSize, *DefaultPageSize, and *?PageSize. However, there is no requirement for a *Default keyword to have corresponding main and query keywords
in a PPD file. A *Default keyword may appear alone if it makes sense.
There is also a relationship between keywords that start with the prefix
*Param, as in *ParamCustomPageSize, and the associated root keyword
(*CustomPageSize, in this case). The prefix *Param signifies that this keyword
documents parameters needed by the root keyword. See *CustomPageSize and
*ParamCustomPageSize for more explanation.
No single keyword is wholly contained as a substring in another keyword, so
that line-oriented searching programs such as grep can be used to parse for
complete keywords, including the * as part of the keyword name. For example, there will not be similar keywords such as *Paper and *PaperSize. However,
*PageSize and *CustomPageSize are legal, because *PageSize is not a substring of
*CustomPageSize.
3 Format
15
Since the format is line-oriented, all statements will start at the beginning of a
line. The * (asterisk) character that begins the main keyword in the statement
must be in the first column.
Main keywords can contain any printable ASCII characters within the range
of decimal 33 to decimal 126 inclusive, except for the characters colon and
slash, which serve as keyword delimiters. Note that space, tab, and newline
are outside this range. There is no escape mechanism for this prohibition,
such as using double quotes to surround illegal characters (for example,
*Quoted Keyword is not legal, because of the space in the keyword name).
The basic format of an entry looks like this
*Default<main keyword>: <optionn>
*<main keyword> <option1>: "PostScript language code"
*<main keyword> <optionn>: "some other PostScript language code"
*?<query keyword>: "PostScript language query code"
An example entry
*DefaultPageSize: Letter
*PageSize Letter: "lettertray"
*PageSize Legal: "legaltray"
*?PageSize: "save [(Letter)(Legal)] papertray get = flush restore"
16
(9 Feb 1996)
anywhere in the chain of files and do not have to be repeated in each file in
the chain. (See section 2.6 for exceptions.) The absence of any of these
keywords might be considered an error, or the parser might have backup
strategies for handling their absence.
If a main keyword is not recognized, the entire statement (including multiline code segments) should be skipped. However, read section 5.2 and
keep in mind that the point of the *OpenUI/*CloseUI structures is to allow new
main keywords to appear without a print manager explicitly recognizing
them. The most functionality will be provided to the user if a print manager handles all main keywords that occur within the *OpenUI/*CloseUI structure, displaying them and invoking their associated code to the best of its
ability. Unrecognized main keywords that occur outside of the *OpenUI/*CloseUI structure should be skipped.
A * in the first column denotes the beginning of a main keyword. Any text
or white space before the * should be considered an error.
The case of main keywords is significant. For example, *PageSize is distinct
from *Pagesize. The proliferation of keywords that are the same textually
except for case is strongly discouraged.
40 characters is the maximum length for main keywords.
Main keywords can contain any printable ASCII characters within the
range of decimal 33 to decimal 126 inclusive, excluding colon and slash.
Delimiters for main keywords are space, tab, colon, or newline. After the
initial * symbol is recognized, all characters through (but not including) the
next space, tab, colon, or newline character are considered part of the main
keyword.
If a main keyword is not terminated with a colon or newline, an option
keyword can be expected. See section 3.3 for information on option keywords.
3.3
Option Keywords
Option keywords are provided whenever there are several choices for a particular feature. For example, there might be many different media sizes listed
in the *PageSize section. These choices are specified using option keywords.
The option keyword immediately follows the main keyword, separated from
it by one or more spaces. For example, in the following statement, the string
Letter is the option keyword:
*PaperDimension Letter: 612 792
3 Format
17
18
(9 Feb 1996)
For print managers, the rapid extensibility of option keywords implies that a
print manager should not parse for specific option keywords for two reasons:
There might be option keywords in the PPD file that are not in this specification. New option keywords can be added to PPD files at build time when
necessary. If a parser only recognizes the option keywords registered in
this specification, it might limit the feature set that can be offered to the
user.
Certain option keywords might not be present in the PPD file for a given
device. Manufacturers will inevitably call features by different names and
use different option keywords to describe those features, so parsing for
*PageSize Ledger is futile if the PPD file being parsed describes that particular feature as *PageSize 17x11. Again, this can limit the feature set offered to
the user, and might cause an error if the parser cannot find a specific
option keyword.
Rather than parsing for specific option keywords, a print manager should
parse for main keywords and display all available option keywords found. To
facilitate easier parsing, all option keywords of a given main keyword (that is
conceivably part of a user interface) are bracketed by the *OpenUI/*CloseUI keywords (see section 5.2).
Other things to remember about parsing option keywords:
An option keyword begins with the first character after white space after a
main keyword. In other words, if a main keyword is not terminated by a
colon, but is followed by white space instead, an option keyword will be
the next non-white-space text encountered.
The case of option keywords is significant. For example, letter is distinct
from Letter.
40 characters is the maximum length for option keywords, including any
extensions or qualifiers separated by dots.
Option keywords can contain any printable ASCII characters within the
range of decimal 33 to decimal 126 inclusive, except for the characters
colon and slash, which serve as keyword delimiters. Once the option keyword is encountered, and before it is properly terminated, a space, tab, or
newline character should be regarded as an error.
3 Format
19
Syntax of Values
value
value
An InvocationValue contains a syntactically correct PostScript language fragment that is usable by the PostScript interpreter. This allows an
InvocationValue to be extracted from the PPD file and placed directly into the
output file.
An InvocationValue meets the following conditions:
Occurs only in statements where there is an option keyword present.
Starts and ends with the double quote character " (decimal 67).
20
(9 Feb 1996)
Everything between the double quotes is treated as literal; that is, newlines
and hexadecimal substrings are allowed and are placed in the output file to
be passed on to the interpreter. Note that, unlike other values, a newline
does not terminate an InvocationValue and a slash does not mark the
beginning of a translation string.
The following characters are forbidden between the starting and ending
double quote characters:
- byte codes outside the range of printable 7-bit ASCII (see section 1.2)
- double quote character " (decimal 67)
There is no escape mechanism or alternate way to represent forbidden
characters.
QuotedValue
To builders of PPD files: If you are concerned about the portability of a PPD
file across different platforms (for example, Windows and Macintosh), you
should also use hexadecimal substrings to represent any byte code that is out-
3 Format
21
side the range of printable 7-bit ASCII. Most PPD files are initially built in
English, using only printable 7-bit ASCII, but when a PPD file is translated
to another natural language, 8-bit byte codes may be needed. Such byte codes
are often specific to the platform and to the natural language environment. If
the file is being translated for a specific platform, the use of 8-bit byte codes
will probably not be a problem for that platforms print managers, but if the
PPD file is supposed to remain portable across platforms, the use of 8-bit
byte codes may hinder portability.
A print manager parsing a QuotedValue is responsible for converting a hexadecimal substring into a sequence of bytes before using them.
The < and > characters must be represented as hexadecimal substrings if
they occur in the value as anything other than hexadecimal substring
delimiters.
The value can be intermixed literal and hexadecimal substrings. For example, the following statements both have valid QuotedValues:
*MainKeyword: "Hi there <ABCDEF> everybody"
*MainKeyword: "<ABCDEF>"
Note
Note
To application developers: 8-bit byte codes were not allowed in PPD files
prior to the 4.3 specification, but this rule was widely violated when PPD
files were translated to other natural languages. Most parsers simply pass the
8-bit byte codes along without rejecting them or attempting to translate them,
but any parsers that expect only printable 7-bit ASCII may have problems
with 8-bit byte codes in translated and newer PPD files.
SymbolValue
22
(9 Feb 1996)
The actual text of the SymbolValue is further constrained by the requirements documented in section .
StringValue
A StringValue can occur in a statement whether or not there is an option keyword present. A value of the form StringValue meets the following conditions:
The value is not surrounded by the double quote character.
The first character of the value cannot be a double quote character, to
avoid a parser confusing a StringValue with a QuotedValue or an
InvocationValue.
The first character of the value cannot be a caret ^ (decimal 94), to avoid
confusing a StringValue with a SymbolValue.
The value is composed of printable 7-bit ASCII byte codes, possibly separated by spaces and tabs into multiple components. It is terminated by a
newline, or by a slash, in the case of a translation string.
There is no escape mechanism for forbidden characters.
NoValue
3 Format
23
24
(9 Feb 1996)
There are many entries in a PPD file that can be encountered at the user level,
including main keywords and option keywords displayed as selectable
choices in a user interface, and messages from the device. Sometimes these
keywords and device messages can be cryptically worded and must be
reworded for clarity, or they might need to be translated into another language for the user to understand them.
If keywords and messages changed with each translation of the PPD file to a
new language, a parsing program would have to be written to recognize the
keywords in each new language, which would greatly expand the size of the
parser and the amount of work involved in writing it. Instead, a syntax is provided for the optional use of translation strings, which are appended to the
original keywords and messages. Thus, normal keyword searches can be carried out, and the translation strings can optionally be presented to users
instead of (or in addition to) the keywords.
If a PPD file is translated into several languages, there will be one PPD file
for each language. In various language versions of a PPD file, only the translation strings, certain QuotedValues that are used to identify the device, and
possibly the comments, will differ. All other information, including main
keywords and option keywords, will remain the same.
3 Format
25
Note
To builders of PPD files: The values of the following keywords may be translated directly, without using a translation string: *Include, *ModelName,
*NickName, *PCFileName, and *ShortNickName. Because these are QuotedValues,
they may include 8-bit byte codes.
A translation string can occur after any option keyword or after any type of
value except a SymbolValue. The value of a *Default keyword may have a
translation string only if it appears as a stand-alone keyword (see section 1.2),
such as *DefaultColorSep, or *DefaultResolution without a corresponding *Resolution
keyword. If the *Default keyword is not stand-alone (if it appears with an associated main keyword and option keywords), it does not need a translation
string and should not have one, because such translation strings, if any,
should occur with the option keywords, to avoid confusing parsers. See section 2.6, section 3.2, and section 4.5 for more information on *Default keywords.
With closely related statements, such as *PageSize and *PageRegion, it is impossible to predict which statement a print manager will read to get the translation string for an option keyword. For continuity of results, if a given option
keyword has a translation string, and that option keyword is used with multiple main keywords and has the same semantics across those keywords, then
the translation string should be on every occurrence of the option keyword
and should be identical across occurrences. For example, if the *PageSize
statement for Letter uses a translation string Portrait Letter, the *PageRegion,
*PaperDimension, and *ImageableArea statements for Letter should all use the same
translation string.
A translation string is detected by the presence of a slash (/) character (decimal 47), and continues until a colon (if the translation string is on an option
keyword) or a newline (if the translation string is on a value) is encountered.
The following is an example of the translation string syntax showing both the
translation from English into French of an option keyword (Ledger) and a
value (the message out of paper):
*LanguageVersion: French
*PageSize Ledger/Papier Ledger: "statusdict /ledgertray get exec"
*PrinterError: "out of paper"/Il ny en a plus de papier.
This example shows the translation of two cryptic values into strings that are
more meaningful to the user (a translation into English):
*LanguageVersion: English
*DefaultColorSep: ProcessBlack.90lpi.1200dpi/90 lpi / 1200 dpi
*PrinterError: "CVR OPN"/cover open
26
(9 Feb 1996)
translation strings, the option keywords and values must be displayed directly
as appropriate. A parser must be especially careful not to confuse a translation string following an option keyword with the PostScript language
sequence that follows in the value field, after the colon.
To unambiguously relate natural-language characters to byte codes, an
encoding is specified for each natural language (such as English or French)
that can be used in a PPD file. These encodings are described by the keywords *LanguageVersion and *LanguageEncoding, documented in section 5.3.
Translation strings may include 8-bit byte codes, such as characters with
accents. See section 1.2 for the range of byte codes allowed in PPD files. If
the builder of the PPD file is concerned about file portability across platforms, the byte code range in translation strings should be limited to printable
7-bit ASCII, with out-of-range byte codes represented by hexadecimal substrings (defined in section 1.2). A translation string can be represented partially or wholly as a hexadecimal substring. A print manager must convert the
hexadecimal substring to the appropriate sequence of byte codes before displaying the translation string to the user.
The following example shows the Swedish translation string for the printer
error message cover open, using a hexadecimal substring to represent the
single eight-bit ISOLatin1 character Odieresissmall.
*LanguageVersion: Swedish
*PrinterError: "cover open"/lucka <F6>ppen
Here is the same message, with the Swedish translation displayed entirely as
a hexadecimal substring:
*PrinterError: "cover open"/<6C75636B61 20 F67070656E>
3 Format
27
Human-Readable Comments
Comments are supported in the PPD files using the main keyword *%. Anything following this main keyword (through the end of the line on which it
appears) should be ignored by a parsing program. The * character is the same
introductory symbol used for all main keywords, and the % character is borrowed from PostScript language syntax as its comment character. These comments will begin only in column one, for simplicity.
There can also be comments in any PostScript language code, using the standard syntax of starting the comment with a %. Comments in code should be
kept to a minimum, however, to reduce transmission time.
3.7
The PostScript language sequences supplied for invoking device features are
usually represented as InvocationValues. Sometimes they are represented as
QuotedValues, for example, when they contain binary data.
28
(9 Feb 1996)
The PostScript language sequences supplied in the PPD files are guaranteed
to work only on the device for which the file was prepared. The sequences
assume the default state of the interpreter. Only userdict and systemdict (and
globaldict on Level 2 devices) are assumed to be on the dictionary stack. There
will be no memory use (save and restore are used where appropriate) except as
in setting frame buffers, where memory use is necessary.
Adobe recommends that the following syntax be used when building PPD
files
<dict> /foo get exec
rather than
<dict> begin foo end
This will prevent errors caused by a print manager not cleaning up the dictionary stack properly after catching an error in a stopped context.
Level 2 PostScript language sequences
Sometimes a PostScript language file generated using a PPD file for a given
device is redirected to another, different device. This can happen if the file is
stored for later printing and the original device is not available at print time,
or if files are exchanged between users with different printers, or if an intelligent spooler redirects the file to a more appropriate printing device. Although
there is absolutely no guarantee that a PostScript language file created for a
3 Format
29
specific device will work on another device, there is a reasonable chance that
it will, if the file contains few or no calls to special device features. One or
more of the following may happen:
The file causes the PostScript language interpreter in the device to abnormally terminate execution, possibly requiring the device to be reset.
The file fails to print any pages.
Features requested by the file, such as duplex or a certain size of paper, are
not available, so these feature requests are ignored and the file prints on
the devices default paper with default feature settings.
Some requested features exist but their settings have different meanings on
the current device, so the file prints but the results are unexpected. For
example, the printing might be darker, or the image might be oriented
sideways on the paper.
The file prints correctly because all the feature requests are available and
the settings have the same semantics, or because there are no feature
requests and the default page size and default feature settings are acceptable.
A print manager can guard against the first two cases by executing each feature request in a stopped context. Thus, a request for a feature that does not
exist on the current device will effectively be ignored. (See section 2.4 for
more information on error handling by print managers.)
In the next two cases, the printed effect may not be exactly what the user
requested, but at least they'll get something. For example, a file requesting
duplex printing may be sent to a simplex printer, and depending on the print
manager, it may print, but only on one side of each page.
To further the aim of printing whenever possible, even when Level 2 code is
sent to a Level 1 device, the following recommendations should be followed
when building a PPD file.
Do not use the Level 2 dictionary syntax symbols << and >> directly in
invocation code when constructing dictionaries. Doing so will cause a
syntaxerror if this code is re-directed to a Level 1 device. Such a syntaxerror
cannot be trapped in a stopped context by a print manager. The two alternatives are to use the more verbose Level 1 method:
N dict
dup /name1 value1 put
dup /name2 value2 put
...
dup /nameN valueN put
30
(9 Feb 1996)
This second method will avoid the syntaxerror described above. It will consume a tiny amount of VM, which will be restored by automatic garbage collection on a Level 2 device.
3.8
where the value nnn is a real number that designates conformance to a version of the PPD specification. (See section 5.2 for details on *PPD-Adobe.)
Files conforming to this version of the specification would have the following
statement:
*PPD-Adobe: "4.3"
*NickName
*PSVersion
*LanguageEncoding
*Manufacturer
*ModelName
*PCFileName
*LanguageVersion
*ShortNickName
The number of bytes in a PPD file is not limited by this specification. However, certain print managers impose limits on some aspects of a PPD file.
Builders of PPD files should be aware of the following restrictions:
In the Windows environment, both PScript 4.x and AdobePS 4.x limit the
combined total of all invocation code, query code, keywords, options, and
translation strings in a PPD file to less than or equal to 64KB. Also, the
number of *OpenUI and *JCLOpenUI entries must be less than 100.
3 Format
31
Syntax of Specification
Throughout this specification, certain syntactical conventions are followed to
make things clearer for the reader.
4.1
General Syntax
means that this statement in the PPD file will read either
*DefaultManualFeed: True
or
*DefaultManualFeed: False
32
(9 Feb 1996)
The ellipsis ( ... ) means that more than one instance of a token can appear,
separated by white space. For example, this statement in the PPD file specification
*Extensions: extension...
means that this main keyword has several possible values, indicating
which language extensions are supported by the device. Because a device
can support several language extensions, this keyword can have multiple
values, separated by white space.
For example, both of these PPD file statements are valid
*Extensions: FileSystem
*Extensions: CMYK FileSystem Composite
U
UII
Main keywords that are commonly bracketed with the *OpenUI/*CloseUI keywords in PPD files are marked in this specification with this symbol (UI for
user interface) next to the keyword definition. This does not mean that the
main keyword must be bracketed by *OpenUI/*CloseUI; it only informs builders
of PPD files that this keyword is commonly considered to be a UI keyword.
See section 5.2 for details on *OpenUI/*CloseUI.
A few of the main keywords may require starting an unencapsulated job (formerly known as exiting the server loop) for correct execution. These have
been flagged by a dagger in the left margin as shown here. If handling such a
keyword, the print manager must perform the following tasks:
declare an unencapsulated job using the DSC comment:
%!PS-Adobe-3.0 ExitServer
obtain a password from the user, from system software, or from the keyword *Password in the PPD file, and put the password on the operand stack
emit the code from the daggered keyword
end the job and use the DSC comment %%EOF
Builders of PPD files must ensure that the code contained in the value of a
daggered keyword does the following:
checks for the existence and validity of a password on the operand stack
begins an unencapsulated job by using exitserver (Level 1) or startjob (Level
2)
performs the function of the daggered keyword (for example, changes the
resolution or fixes a bug)
4 Syntax of Specification
33
The code to perform the first two functions can usually be copied from the
value of the *ExitServer keyword in the PPD file.
4.2
*MainKeyword
This indicates that for the main keyword *MainKeyword, there is a restricted
option keyword list consisting of two legal option keywords (Option1 and
Option2), and the appropriate syntax for the value is a PostScript language
invocation string enclosed in double quotes. In the PPD file, there would be
one statement for each main keyword-option keyword pair:
*MainKeyword Option1: "invocation"
*MainKeyword Option2: "different invocation"
34
(9 Feb 1996)
*MainKeyword
optiontype: invocation
This indicates that for the keyword *MainKeyword, there can be many legal
option keywords. The currently known option keywords will be listed in this
specification with the main keyword, but others can be added at any time. As
above, the appropriate syntax for the value of the tuple is a PostScript language invocation string enclosed in double quotes. Again, in the PPD file,
there would be one statement for each main keyword-option keyword pair:
*DifferentKeyword Option1: "invocation"
...
*DifferentKeyword Optionn: "invocation"
For example, the list of page sizes offered by a device is an extensible list:
*OpenUI *PageSize: PickOne
*DefaultPageSize: Letter
*OrderDependency: 30 AnySetup *PageSize
*PageSize Letter: "(<<) cvx exec
/PageSize [612 792] (>>) cvx exec setpagedevice"
*End
*PageSize Legal: "(<<) cvx exec
/PageSize [612 1008] (>>) cvx exec setpagedevice"
*End
*PageSize Ledger: "(<<) cvx exec
/PageSize [1224 792] (>>) cvx exec setpagedevice"
*End
*?PageSize: query code to get current /PageSize
*CloseUI: *PageSize
*MainKeyword:
int
This main keyword has no option keywords, and the appropriate syntax for
the value of the tuple is an integer enclosed in double quotes. For example
*FreeVM: "110980"
*?MainKeyword:
query
4 Syntax of Specification
35
*MainKeyword
*DefaultMainKeyword:
*?MainKeyword:
option: invocation
keywordOption | Unknown
query
Where it makes sense, the main keyword, default keyword, and query keyword are documented in a block together, as shown here. The valid return
values for the query keyword are documented to the right of the sample query
statement.
4.3
Elementary Types
file itself, or it might be a path to the file. The following are all examples of
legal filenames:
*Include:
*Include:
*Include:
*Include:
"MyDevice.PPD"
"/home/adobe/PPDfiles/myfile.ppd"
"My<3C>test<3C>file.ppd"
"C:\lib\MyDevice.PPD"
In the third example, the filename contains the double quote character, represented as a hex string. The encoding of a filename is system-dependent and is
not necessarily portable to other systems. At minimum, the filename or pathname might have to be edited when porting.
fontname
A fontname is a special case of a string, which is defined in this section. A fontname is delimited by blanks. Examples of standard fontnames can be found in
Standard Character Sets and Encoding Vectors, in Appendix E of the PostScript Language Reference Manual, Second Edition, and some are listed
here:
Times-Roman
Helvetica-Bold
NewCenturySchoolbook-Italic
Notice that fontname does not start with a slash character (/) as it does in the
PostScript language when the font name is specified as a literal.
int
36
(9 Feb 1996)
invocation
An invocation is a sequence of valid PostScript language commands. An invocation is generally used to perform some manipulation of the device. It can be
scientific or exponential notation. That is, the following are all valid:
1.4 -4.2273 .165 0.165
4 Syntax of Specification
37
string
A string is comprised of any printable characters, but is delimited by white
space. The length of a string is limited by the 255 characters-per-line limit
The following option keywords are used with many different main keywords
and have universal meaning throughout a PPD file.
True
True is used in a PPD file in two ways. When used as the value of a *Default
keyword, True means that the default state of that particular feature is on.
For example, the following statement means that this device will feed media
from the manual feed slot unless explicitly told to do otherwise.
*DefaultManualFeed: True
When used as an option to a main keyword, True means that the value of that
option of the keyword is the PostScript language code required to turn on
or invoke the feature. For example, the following statement contains the code
to enable the manual feed slot:
*ManualFeed True: "statusdict /manualfeed true put"
False
Like True, False is used throughout a PPD file in two ways. When used as the
value of a *Default keyword whose value is a boolean True or False, False means
that the default state of that particular feature is off. For example, the following statement means that this device will not feed media from the manual
feed slot unless explicitly told to do so.
*DefaultManualFeed: False
38
(9 Feb 1996)
When used as an option to a main keyword, False means that the value of that
option of the keyword is the PostScript language code required to turn off
or deselect the feature. For example, the following statement contains the
code to deselect the manual feed slot.
*ManualFeed False: "statusdict /manualfeed false put"
None
Like False, None is used to indicate that a certain feature is deselected (off) by
default, and also to indicate how to deselect (turn off) a feature. False is used
with boolean features; None is used for features with more than two states. For
example:
*DefaultFoldType: None
*FoldType None: "code to turn off folding"
*FoldType Saddle: "code to invoke a saddle fold"
*FoldType ZFold: "code to invoke a z-gate fold"
Code associated with a None option will explicitly turn off the feature. In the
example above, the None option would contain code to invoke no folding.
Note
This string is returned from queries if the correct information can not be
determined, or none of the valid keywords can be returned. It is also used as a
value for *Default keywords, to denote that there is no specific default state (for
example, *DefaultPageSize: Unknown on a device whose page size is not set until
the user requests a page size). However, a stand-alone *Default keyword should
never have a value of Unknown, as that provides no useful information for a
print manager.
Note
4 Syntax of Specification
39
4.5
40
(9 Feb 1996)
Keywords
This section contains a description of how builders of PPD files can define
their own main keywords, followed by documentation of the currently
defined keywords and a description of their uses. The keywords are grouped
according to their functionality. Where appropriate, registered option keywords are documented along with the keywords with which they are associated. This is to prevent a given combination of main keyword and option
keyword from having multiple meanings across multiple PPD files.
All keywords are optional in a PPD file, unless noted as Required in the keyword description. The following keywords are currently required:
*DefaultImageableArea
*DefaultPaperDimension
*ImageableArea
*Manufacturer
*PageRegion
*PCFileName
*PSVersion
Note
*DefaultPageRegion
*FileVersion
*LanguageEncoding
*ModelName
*PageSize
*PPD-Adobe
*ShortNickName
*DefaultPageSize*
*FormatVersion
*LanguageVersion
*NickName
*PaperDimension
*Product
newly required in the 4.3 version; it was not required in previous versions.
Every feature of the device that can be described by a PPD keyword should
be included in the PPD file. Inclusion of all relevant keywords in the PPD file
produces the most complete picture of the device for the print manager and
user. Builders of PPD files should consider all non-required keywords to be
recommended for inclusion in the PPD file if they are relevant to the device.
On the other hand, if a feature is not supported by a device, that features
default, invocation, and query keywords must be omitted from the PPD file.
To a print manager, absence of a feature in the PPD implies lack of device
support for that feature.
5.1
Device manufacturers and other builders of PPD files may create their own
main keywords by following the rules in this specification. For tracking purposes, such keywords must be named with a prefix unique to the creator. For
example, Acme Printer Co. might use the prefix "*AC", and their keywords
would have names like *ACHalftone. The same prefix must be used on all keywords created by one company. For ease of tracking and guaranteed prefix
uniqueness, Adobe recommends using the same two-letter prefix already in
use by the creator for their PPD file names (and *PCFileName). The list of
assigned prefixes can be found in Appendix D: Manufacturers Prefix List
and *Manufacturer Strings, and updates can be obtained from the address on
the front cover.
5 Keywords
41
Keywords created outside of Adobe must not conflict with or duplicate the
definition of keywords already existing in this specification. To avoid unnecessary proliferation of keywords, builders of PPD files should make every
effort to see if their devices feature can be defined by an existing keyword,
before creating a new keyword.
Print managers cannot be expected to know how to deal with an unknown
keyword, unless the keyword is enclosed by the *OpenUI/*CloseUI construction
and follows all the rules associated with that construction. See section 5.2 for
information about *OpenUI and *CloseUI.
Builders of PPD files may also create their own option keywords if necessary.
No unique prefix is necessary for option keywords, but all rules pertaining to
option keywords must be followed. Again, every effort should be made to use
an existing option keyword before defining a new option keyword. See section 3.3 for rules pertaining to option keywords. In addition, although it is not
required, option keywords usually have the first letter capitalized, for better
readability of the user interface created by a print manager.
5.2
Structure Keywords
The keywords in this section do not invoke any device features. Instead, they
provide structure to a PPD file and are intended to aid in parsing the PPD file
and building a user interface.
*PPD-Adobe:
4.3
Required. This keyword must be the first line in a valid PPD file. The QuotedValue of 4.3 signifies that this file conforms to the 4.3 version of this specification. Conformance to a later version of this specification would be
indicated by a higher number. A parser can assume that a changed digit to the
right of the decimal indicates a minor revision to the specification, and the
file can be safely parsed by older parsers. A change in the digit to the left of
the decimal indicates a more significant change in the specification, and a file
that conforms to the newer version of the specification may be incompatible
with older parsers.
*OpenUI
*CloseUI:
42
(9 Feb 1996)
For example, the list of page size options offered by the *PageSize keyword
will be bracketed with *OpenUI/*CloseUI, because the device supports the user
selection of a page size, but the keyword *Throughput, which describes the
rated printing capacity of the device, would not be bracketed by *OpenUI/
*CloseUI, because the throughput is not selectable by the user. Query keywords, *Default keywords, and any other associated keywords, such as *Paramkeywords and *OrderDependency, are included in the *OpenUI/*CloseUI bracketing
for convenience and readability. (Adobe strongly recommends that every
*OpenUI/*CloseUI entry contain an appropriate *OrderDependency statement, so
that the print manager knows where to emit the code in the output file.)
The StringValue values PickOne, PickMany, and Boolean denote the type of
option list for this feature.
PickOne means that, for this feature, the device supports only one choice at
a time from the list of available options. The print manager can use this
information when building a user interface, so that when a user selects any
single choice from the list, the other choices are deselected. An example of
a PickOne type of list is *PageSize, which displays the list of available page
sizes. A page must always have a size, and it cannot be two sizes at once.
The option None has special meaning. Code associated with None explicitly
deselects the other options in the list. For example, a list of stapling
options might include None, meaning do not staple. If the user selects
None, the print manager should send the code supplied to disable stapling,
in case the device is set up to staple by default.
PickMany means that, for this feature, the device supports one or more
choices at a time from the list of available options. For example, a device
might allow two kinds of folding to occur at once. The print manager can
use this information when building a user interface, so that when a user
selects any single choice, the other choices in the list are not disabled or
deselected.
In a PickMany type of option list, one of the options must be None. The code
associated with None explicitly deselects all other options in the list. This is
an exception to the general PickMany rule of allowing more than one choice
at a time. In a user interface, if a user selects None, all other options for that
feature should be deselected by the print manager. If a user selects any
option other than None, then None should be deselected.
Boolean means that there are only two choices, True and False. This tells a
print manager that this feature could be displayed as a check box or radio
buttons, rather than as a menu list.
5 Keywords
43
The parameter mainKeyword, which is both the option of the *OpenUI statement
and the StringValue of *CloseUI, is the keyword whose options are listed
within the *OpenUI/*CloseUI pair. The value may optionally have a translation
string to show the manufacturers preferred name for the feature.
Here is a sample entry:
*OpenUI *Smoothing/Smooth Characters: Boolean
*DefaultSmoothing: False
*OrderDependency: 40 AnySetup *Smoothing
*Smoothing True: "invocation code"
*Smoothing False: "invocation code"
*?Smoothing: query code
*CloseUI: *Smoothing
Given this entry in a PPD file, the print manager could use this information to
display a menu, checkbox, or radio buttons labeled Smooth Characters
with two options, True and False.
The *OpenUI/*CloseUI structure provides several benefits:
It allows a print manager to build a user interface automatically and uniformly. The user-selectable options bracketed by *OpenUI/*CloseUI follow a
certain form. Each entry contains one or more statements consisting of a
main keyword, option keyword, and a value, which is a code sequence.
The print manager can display the options, record the users selection of
an option, extract the code for that option, and send the code to the device,
all without having any semantic knowledge of the feature and its options.
New options can be added to a main keyword without the print manager
having to be rewritten to parse for them. Assuming that a print manager
simply displays the options and executes the associated code, the print
manager does not need to recognize the option or know anything about the
code it is sending to the output file.
New main keywords can be parsed, if they are of the proper form that can
be enclosed in *OpenUI/*CloseUI. A print manager that parses *OpenUI/*CloseUI
properly should not parse for a specific main keyword, and should not care
if a new main keyword is added. Not all new main keywords fall into the
*OpenUI/*CloseUI category, but if they do, a print manager should read them,
display their options, and execute the associated code.
U
UII
44
Main keywords that are commonly bracketed with *OpenUI/*CloseUI are marked
in this specification with the UI symbol (shown here) next to the keyword
definition. Some features that appear in the user interface require extra work
from the print manager, such as opening a communication channel or
requesting information from a user. These more complex features are not
(9 Feb 1996)
The *OpenUI/*CloseUI provides most of what typically constitutes a user interface, so that a dumb parser could construct a reasonable user interface
simply by reading all the features marked by *OpenUI/*CloseUI and displaying
them. It is not meant to be a complete user interface design tool.
*OpenGroup:
string
*CloseGroup:
string
5 Keywords
45
The example below groups all of the finishing features of the device (the
invocation code is omitted to save space, and the blank lines are only for
readability):
*OpenGroup: Finishing
*OpenUI *FoldType: PickOne
*DefaultFoldType: None
*FoldType Saddle: " "
*FoldType None: " "
*CloseUI: *FoldType
*OpenUI *Collate: Boolean
*DefaultCollate: True
*Collate True: " "
*Collate False: " "
*CloseUI: *Collate
*CloseGroup: Finishing
The sample PPD file in section 6.2 shows imagesetter features in a group.
Another logical group is finishing features. By parsing for the keywords
*OpenGroup/*CloseGroup, a print manager can display Finishing and Imagesetting to
the user as buttons or menu items, and all the finishing features and imagesetting features can be hidden from the user until they are needed.
This syntax, like the syntax of *OpenUI/*CloseUI, allows features to be added to
a group without the print manager needing to know about them. New *OpenUI/
*CloseUI features can be added within an *OpenGroup/*CloseGroup grouping, and
a print manager that parses for *OpenUI/*CloseUI correctly should be able to
parse for the new features in the same manner. This enables a print manager
to add new items to the user interface without the print manager itself having
to be rewritten.
*OpenSubGroup:
string
*CloseSubGroup:
string
These keywords are used to designated groups within groups. They can only
appear within a *OpenGroup/*CloseGroup bracketing keyword pair. Groups may
be nested to any level with *OpenSubGroup/*CloseSubGroup. The group name
string must conform to the rules for the elementary type string (see section
4.3) and it must be unique; there can be only one group or sub-group with a
given name. See the description of *OpenGroup/*CloseGroup in this section.
46
(9 Feb 1996)
Here is an example of the syntax of these keywords (be aware that the
*OpenUI/*CloseUI entries are not syntactically complete in this example):
*OpenGroup: ProductionPrinting
*OpenSubGroup: MediaSelection
*OpenUI *PageSize ...
...
*CloseUI: *PageSize
*OpenUI *MediaType ...
...
*CloseUI: *MediaType
*CloseSubGroup: MediaSelection
*OpenSubGroup: Administration
*OpenUI ...
...
*CloseUI
*OpenSubGroup: TopSecret
...may include several *OpenUI/*CloseUI entries
*CloseSubGroup: TopSecret
*OpenUI ...
...
*CloseUI
*CloseSubGroup: Administration
*CloseGroup: ProductionPrinting
5 Keywords
47
*OrderDependency:
*NonUIOrderDependency:
keyword.
*NonUIOrderDependency is used only with the few non-UI keywords that emit
code. For example, *CustomPageSize is not a UI keyword because it requires
user input, which is not accommodated by the *OpenUI choices of PickOne,
PickMany, and Boolean. Yet *CustomPageSize typically would appear in a user
interface specially built by a print manager, and when selected by the user,
*CustomPageSize emits code fragments. A print manager needs to know the
order in which these code fragments should be emitted, relative to all other
code fragments. *NonUIOrderDependency provides that information for non-UI
keywords.
Although *OrderDependency and *NonUIOrderDependency are not required keywords, to ensure correct results during printing, Adobe strongly recommends
that every *OpenUI/*CloseUI entry and every *JCLOpenUI/*JCLCloseUI entry contain a *OrderDependency statement and that all non-UI keywords that emit code
have an associated *NonUIOrderDependency statement.
The value is a StringValue with multiple components separated by white
space. Each component is defined identically for both keywords. The value of
real specifies the relative order in which this code should be emitted. It defines
the ordering across all device-specific code fragments within a section
(defined later). The absolute values of the order numbers are not important,
only their values relative to other order numbers within the same section.
Within a section, code assigned a lower number should be emitted before code
assigned a higher number. Multiple code fragments in a single section can be
assigned the same order number. If the order numbers assigned to two code
fragments are equal, the code fragments can be emitted in either order. Code
fragments that do not have an *OrderDependency or *NonUIOrderDependency statement should be emitted after all fragments that do have ordering numbers.
48
(9 Feb 1996)
The value of section describes where in the job the code fragment can be emitted. The possible values for section correspond to the sections of a document
file, as defined by the Adobe Document Structuring Conventions, version 3.0.
Valid values for section are as follows:
ExitServerThis code makes a change to the device that will take effect at
the start of the next job. This code should be sent as a separate job, before
the job it will affect. The correct password (the value of *Password) must be
supplied before this invocation.
PrologThis code supplies resources that must be in the Prolog section of
a document.
DocumentSetupThis code must be emitted in the Document Setup section,
after the %%BeginSetup comment
PageSetupThis code must be emitted in the Page Setup section after the
%%BeginPageSetup comment and before the page level save.
JCLSetupThis code provides job level control for devices that support a
job control language. This code must be emitted after the code emitted by
*JCLBegin and before the code emitted by *JCLToPSInterpreter.
AnySetupThis code must be emitted in either the Document Setup or
Page Setup section and must follow the rules defined for the values
DocumentSetup or PageSetup accordingly.
Note
To builders of PPD files: Use AnySetup as the section name if there is no specific reason to specify PageSetup or DocumentSetup. This lets a print manager
make the most efficient decision about where to emit the code fragment. However, to be labeled AnySetup, the code fragment must work correctly when
emitted in either section,
The values of mainKeyword and optionKeyword specify a statement in the PPD file
that emits device-specific code, which must be emitted in the order defined
by section and order. The parameter optionKeyword will be omitted if mainKeyword
has no option keyword. The optionKeyword may be omitted if the code fragments for all option keywords for the given feature have the same classification and ordering (this is the common case).
5 Keywords
49
The following example specifies that the code to change the resolution must
be emitted before the code to change the input slot (these entries are not syntactically complete):
*OpenUI *Resolution: PickOne
*OrderDependency: 10 AnySetup *Resolution
*DefaultResolution: 1200dpi
*Resolution 2504dpi: "..."
*Resolution 1200dpi: "..."
*?Resolution:"..."
*CloseUI: *Resolution
*OpenUI *InputSlot: PickOne
*OrderDependency: 20 AnySetup *InputSlot
*DefaultInputSlot: Upper
*InputSlot Upper: "..."
*InputSlot Lower: "..."
*?InputSlot: ...
*CloseUI: *InputSlot
Note
Builders of PPD files for Level 2 devices can facilitate optimized performance by assigning the same *OrderDependency section and order number to as
many keywords as possible. A print manager can then bundle all of the code
fragments that have the same values for section and order into one setpagedevice
call, by redefining setpagedevice to collect the key-value pairs into a single
dictionary that is then executed with a single real setpagedevice call. Very few
keywords require a different order number on Level 2 devices, so keywords
should be assigned the same order number unless there is some reason to
assign a different order number. If a given code fragment would cause different results when executed alone than it would when bundled with other
parameters (in any order) into a single setpagedevice call, that code fragment
should be assigned a separate order number. For example, if the code fragments for *ManualFeed and *Duplex are both emitted in the AnySetup section, and
the result of emitting the code fragments separately, like this:
<</ManualFeed true>> setpagedevice
<</Duplex true>> setpagedevice
produces the same result as emitting the code fragments together, like this:
<</ManualFeed true /Duplex true>> setpagedevice
then *ManualFeed and *Duplex can be given the same order number. Otherwise,
if any one of these methods gives a different result than the other methods,
*ManualFeed and *Duplex should be assigned different (and appropriate) order
numbers.
50
(9 Feb 1996)
*QueryOrderDependency:
If there are device queries accompanying a print job, all such queries must be
emitted in a query job, which immediately precedes the print job. Among
other things, this allows spoolers to process the queries without processing
the actual print job. (See the DSC for a description of query jobs.) In some
cases, the query job must also contain the invocation code from certain main
keywords, emitted before certain queries, in order for the query response to
be accurate. For example, changing the resolution of the device can affect the
amount of free VM, so to obtain a more accurate estimate of free VM, the
device resolution code should be emitted in the query job before querying for
free VM.
*QueryOrderDependency identifies main keywords whose invocation code needs
to be emitted in the query job, before any queries, in order for the query
response to be accurate. If a print manager queries for any of the following
items: free VM, device resolution, available fonts (and there may be others),
any invocation code referenced by *QueryOrderDependency should be emitted in
the query job before any of these queries are emitted.
5 Keywords
51
would otherwise have the same order number (this is usually the case). The
*QueryOrderDependency statement for a given UI keyword should be within the
*OpenUI/*CloseUI bracketing for that keyword. For example:
*OpenUI *Resolution: PickOne
*OrderDependency: 10 AnySetup *Resolution
*QueryOrderDependency: 10 *Resolution
*Resolution 600dpi: "..."
*Resolution 1200dpi: "..."
*?Resolution: "..."
*CloseUI: *Resolution
This tells the print manager that the invocation code for the resolution chosen
by the user should be emitted in the query job, before any queries, and then
emitted again in the print job. There is no relationship between the order
numbers of *OrderDependency and *QueryOrderDependency.
*UIConstraints:
This keyword, whose value is a StringValue with multiple components separated by white space, denotes exclusionary relationships between pairs of
device features. It tells a print manager which device features cannot be supported together, allowing the print manager to prevent the selection of both
features at once in the user interface. For example, a device might forbid
duplex printing when feeding from the envelope tray, or perhaps A4 size
paper can only be fed from the upper slot, which would be expressed as a
constraint between the A4 page size and all input slots other than the upper
slot.
*UIConstraints can also be used to express the relationship between an optional
52
(9 Feb 1996)
The semantics of this in a user interface might be as follows: When the media
type Transparent has been selected, the output bin labeled Upper is not available.
The reverse is also true; when the output bin labeled Upper has been selected,
the media type Transparent is not available.
Each feature or both features may also be specified without any options. For
example, a constraint might take this form:
*UIConstraints: *FeatureA *FeatureB Option1
The semantics of this are as follows: If any option for *StapleWhen, other than
None or False, is selected, transparent media cannot be selected.
Likewise, this format is legal:
*UIConstraints: *FeatureA Option1 *FeatureB
5 Keywords
53
*NonUIConstraints:
To builders of PPD file: *UIConstraints is used only between pairs of main keywords. Do not write constraints between the various options of a single main
keyword. For example, do not write a constraint between *PageSize Letter and
*PageSize Legal. Options are already constrained against each other by their
PickOne or Boolean type, so additional constraints are unnecessary and illegal.
This keyword works exactly like *UIConstraints except that it is used with nonUI keywords (keywords not surrounded by *OpenUI/*CloseUI or *JCLOpenUI/
*JCLCloseUI). Please see the description of *UIConstraints for the complete syntax
and semantics of *NonUIConstraints. All of the rules specified for *UIConstraints
apply to *NonUIConstraints, except where noted in this description.
54
(9 Feb 1996)
This indicates that if the user has chosen the Upper input tray, a custom page
size cannot be requested.
The semantics of *NonUIConstraints are that a constrained feature is not available. Because non-UI keywords are not consistent in behavior, the exact
action taken is up to the print manager. Advice to the print manager encountering a constrained non-UI keyword might be dont do what you would normally do. For example, for keywords such as *CustomPageSize and *InsertSheet,
which require a print manager to display a specialized user interface, that
interface should not be displayed or should be grayed out.
The following keywords are the only non-UI keywords that can appear in a
*NonUIConstraints statement: *CustomPageSize, *LeadingEdge, *UseHWMargins,
*InsertSheet, *FaxSupport, and *SetResolution. More keywords may be added to this
list in future versions of this specification, after an analysis to determine the
impact on existing applications.
Note
makes sense, it will be included in the PPD file, and a print manager should
honor it, but if a reciprocal constraint is missing, a print manager should not
attempt to create and enforce such a constraint.
*Include:
filename
This allows the explicit inclusion of another PPD file (or partial file) into the
current PPD file. The QuotedValue filename is the name of the file to be
included. See section 4.3 for details on the syntax of filename and section 2.6
for details on including one PPD file within another.
*End
5 Keywords
55
5.3
The keywords in this section provide general information about the PPD file
and the device it describes. The keywords in this section do not invoke any
device features.
*FileVersion:
string
Required. This keyword identifies the version number of the PPD file itself. It
is used only to distinguish between releases of the same file, not to distinguish one file from another.
The value, a QuotedValue, is a string of the form 1.0. A standard version
numbering scheme is employed. For major changes to the device and the
PPD file, including upgrading the PPD file to match a new version of the
PPD File Format Specification, the entire number will be incremented to the
next whole number (for example, from 1.0 to 2.0). For minor fixes to the PPD
file (including typographical errors), the integer to the right of the decimal
will be incremented (for example, from 1.0 to 1.1 and from 1.9 to 1.10). This
permits the various versions of a PPD file to be identical in most ways
(including file name) but still be distinguished from one another. All released
PPD files will initially have the string 1.0 in this field.
*FormatVersion:
string
Required. This provides the version number of the PPD file format specification to which the PPD file conforms. It is retained primarily for backward
compatibility, as the newer keyword *PPD-Adobe provides both the information
that this file is a PPD file and the specification version to which the file conforms.
The value, a QuotedValue, is a string of the form 1.0. For a PPD file to conform to the version of the specification detailed in this document, the value of
*FormatVersion must be 4.3. If a PPD file is updated to reflect changes in the
PPD File Format Specification, this statement should be changed to match
the new specification version number.
*LanguageEncoding:
encodingOption
56
(9 Feb 1996)
*LanguageEncoding does not identify the natural language of the PPD file; that is
the role of the *LanguageVersion keyword. In most cases, a parser needs only to
parse the *LanguageEncoding keyword, and *LanguageVersion can be ignored. The
value of *LanguageEncoding contains the information needed to allow a parser
to convert text strings from the encoding used in the PPD file to the encoding
used on the host system.
If *LanguageEncoding is present, its value overrides the default encoding
implied by the *LanguageVersion keyword.
The values of encodingOption, a StringValue, are as follows:
ISOLatin1Uses the ISOLatin1 encoding
ISOLatin2Uses the ISOLatin2 encoding
ISOLatin5Uses the ISOLatin5 encoding
JIS83-RKSJUses the RKSJ (informally known as Shift JIS) encoding
and the JIS X0208-1983 character set
MacStandardUses Macintosh standard encoding
WindowsANSIUses Windows ANSI encoding, as defined by Microsoft
for use in the Windows operating system
NoneThe encoding is not specified.
Appendix C provides tables to convert between the ISOLatin1, MacStandard, and
WindowsANSI encodings. See section 3.5 for details on translation string syntax.
Note
*LanguageVersion:
To builders of PPD files: If the initial PPD file is built in English, the value of
*LanguageEncoding is ISOLatin1. If you are building the file in another language,
or if you are translating the file to another language, change the values of
*LanguageVersion and *LanguageEncoding to reflect that language.
languageOption
Required. This identifies the natural language used in the PPD file. For simplicity, the valid values of languageOption are the English words for the natural
languages. The value of languageOption (for instance, French or German) affects
only the human-readable comments, translation strings, and certain QuotedValues such as the value of *NickName. The encoding (mapping from natural
language characters to byte codes) of any part of the PPD file other than these
strings is system-dependent.
5 Keywords
57
The *LanguageEncoding keyword specifies the encoding for the strings mentioned above. If *LanguageEncoding is absent, the encoding of these strings can
be deduced from the value of *LanguageVersion. The currently registered values
for languageOption, which is a StringValue, and their corresponding encodings
(defined under *LanguageEncoding) are:
Table 1 Values for languageOption and their encodings
*Manufacturer:
languageOption
encoding
English
ISOLatin1
Chinese
None
Danish
ISOLatin1
Dutch
ISOLatin1
Finnish
ISOLatin1
French
ISOLatin1
German
ISOLatin1
Italian
ISOLatin1
Japanese
JIS83-RKSJ
Norwegian
ISOLatin1
Portuguese
ISOLatin1
Russian
None
Spanish
ISOLatin1
Swedish
ISOLatin1
Turkish
"text"
Required. This QuotedValue provides the name of the company that manufactured the device. If a device is OEM'ed from one manufacturer to another,
this name will be the name of the manufacturer who is marketing the device
under their own name. A given manufacturer must use the same name string
in each of their PPD files. For example, the name must not be "Acme Printer
Co." in one PPD file and just "Acme" in another. Also, the string must be
unique among manufacturers; two or more manufacturers may not use the
same string. Appendix D provides the current list of known manufacturer
strings.
This keyword gives print managers a way to group together several devices
provided by one manufacturer. Given a set of PPD files, a print manager can
provide a list of manufacturers for the user to choose from, and then provide a
list of PPD files available from the chosen manufacturer.
58
(9 Feb 1996)
Note
To builders of PPD files: For ease of sorting and display by a print manager,
we recommend leaving out unnecessary words like Incorporated, Company, Ltd., and Corporation when creating this string. The purpose of
this keyword is for a print manager and a user to be able to distinguish one
manufacturer from another, not to provide a complete account of the manufacturer's full legal name.
Note
To builders of PPD files: In order for the Windows 95 Image Color Matching
(ICM) system to match InterColor Consortium (ICC) color characterization
profiles to devices and drivers, the first 4 characters (or until a space or
hyphen is found, whichever comes first) of *Manufacturer must be a unique
string, which must match the value of the icHeader.manufacturer tag in the ICC
profile. Practically speaking, this means that in addition to the entire string
being unique among manufacturers, the first 4 characters of *Manufacturer must
also be unique, at least for color printers that have ICC profiles in the Windows 95 system. See the Microsoft document Image Color Matching and
Printer Drivers in Windows 95 for details on how color profiles are matched
to devices and drivers. See Appendix D for a list of currently known
icHeader.manufacturer profile tags.
*ModelName:
text
Because *ModelName is used as a base for the PPD file name in some environments, certain punctuation characters are illegal. The value of *ModelName can
contain only the following characters, whose decimal values are defined here
or in section 1.1: alphanumeric characters, space, period, slash, hyphen (decimal 45), and plus (decimal 43). No other punctuation characters are allowed.
Because *ModelName describes a unique printer model, and because it may be
used as a filename in some environments, there should be only one
*ModelName statement per PPD file. If a PPD file describes two or more models, that fact should be reflected in the value of *ModelName. For example:
*ModelName: Acme FunPrinter or NiftyPrinter
5 Keywords
59
Note
*NickName:
To builders of PPD files: As a guideline, *ModelName should contain the manufacturers name followed by the devices name. In order for the Windows 95
Image Color Matching (ICM) system to match InterColor Consortium (ICC)
color characterization profiles to devices, the *ModelName string must exactly
match the string used to generate the value of the icHeader.model tag in the ICC
profile. In addition, under certain circumstances some print managers
assume that the first 4 characters (or until a space or hyphen is found) of
*ModelName will be the name of the manufacturer and will match the
icHeader.manufacturer tag in the ICC profile. Practically speaking, this means
that the first 4 characters of *ModelName must match the first 4 characters of
*Manufacturer, at least for color printers that have ICC profiles in the Windows
95 system. Finally, because some print managers use *ShortNickName instead of
*ModelName for ICC profile matching, and the builder of the PPD file doesnt
know which print manager will be used, *ModelName should match
*ShortNickName to ensure consistent ICC profile matching. See the Microsoft
document Image Color Matching and Printer Drivers in Windows 95 for
details on how color profiles are matched to devices and drivers and how the
ic.model profile tag is generated.
text
Required. This QuotedValue is the local name for the device. It is unique for
an instance of a device model. It is used primarily at the user interface level
when selecting a device or to distinguish between two otherwise indistinguishable devices (for example, if a single controller is used to drive more
than one type of marking engine).
There may be only one *NickName in a PPD file. If the PPD file is valid for
more than one product, that fact must be reflected in the *NickName value, as in
*ModelName. Initially, the value of *NickName is usually the same as the value of
*ModelName, but it can be edited in a local customization file if necessary,
whereas *ModelName should not be changed. Alternatively, the value may have
a translation string for localization.
Note that the value of *NickName, as a QuotedValue, can include hexadecimal
substrings. These substrings should be translated to natural language characters according to the values of *LanguageEncoding and/or *LanguageVersion.
The length of the value of *NickName is unrestricted, except for line length. For
situations where the length of the nickname must be restricted, see the
description of *ShortNickName.
60
(9 Feb 1996)
*PCFileName:
string
Required. This value, a QuotedValue, provides the name of the PPD file as it
would appear in a PC environment. This name must be eight characters followed by a dot and a three character suffix. It is provided in the PPD file so
that a PPD file with a longer name, transferred from another platform, can be
renamed to a unique PPD filename appropriate to the PC environment.
The file naming scheme employed by Adobe Systems for these PPD files is
an attempt at a mnemonic name as constricted by the DOS operating system.
The naming scheme is partially algorithmic. Filenames and the keyword
*PCFileName are constructed as follows:
The first 2 characters designate the manufacturer. A list of manufacturer
prefixes is kept by Adobe Systems to ensure uniqueness of names. Please
refer to Appendix D: Manufacturers Prefix List and *Manufacturer
Strings for the current prefix list.
The next 6 characters consist of a string that uniquely identifies the device
model.
The suffix of the file is .PPD.
For consistent readability and to minimize confusion of letters with numbers, only capital (uppercase) letters are used.
Note
To builders of PPD files: If a released PPD file is changed, but the product
itself has not changed, the PPD file name (and *PCFileName) will not change.
Examples of this type of change to a PPD file include, but are not limited to,
fixing a typographical error in the PPD file, fixing an incorrect value for
*FreeVM, fixing feature code that was not tested properly and has been found
to be incorrect, adding or changing translation strings, changing the names
of option keywords, removing a keyword that was never supported by the
device, and fixing incorrect information in a *Font statement.
If a released PPD file is changed because the product itself has changed, the
upgraded product must be issued a new PPD file with a new name. Any new
features must be thoroughly tested. If the "old" and "upgraded" products are
substantially the same product, marketed under similar names, Adobe recommends keeping the filenames substantially the same, but using the 8th character of the new filename as a version number for the file. For example, if the
Acme SpiffyPrinter is upgraded with more memory, you might change
ACSPIFFY.PPD to ACSPIFF2.PPD. Using the 8th character as a version
number is a recommendation of common practice, but is not a requirement of
this specification. If the "old" and "upgraded" products are substantially different, or marketed under different names, you should give the new PPD file a
unique name that corresponds as closely as possible to the name under which
the product is marketed.
5 Keywords
61
DPLZ9601.PPD
OKOL8701.PPD
TKPHZR21.PPD
TKPHZR22.PPD
XR_88121.PPD
When a PPD file is translated into another language, Adobe recommends that
you keep the same file name, but isolate the different language-version files
from each other through directory structures or other physical isolation techniques. Different language versions of PPD files are essentially interchangeable at the software level, but need to be organized separately at the user
level.
*Product:
(text)
There can be more than one instance of the *Product keyword if the PPD file is
valid for more than one product. For example, if two devices have identical
PPD files, they can be combined into a single PPD file with the following two
statements
*Product: "(LaserPrinter)"
*Product: "(LaserPrinterII)"
and *ModelName, *NickName, and *ShortNickName would reflect the fact that the
PPD file is valid for two products, like this:
*ModelName: Acme LaserPrinter or LaserPrinterII
*PSVersion:
(string) int
Required. This QuotedValue is composed of two parts. The string in parentheses is the version number of the PostScript interpreter, as returned by the
code sequence
version == flush
62
(9 Feb 1996)
The values are presented in PostScript language form so that they can be
compared with the actual values in the device to determine whether or not the
PPD file matches the device.
There can be more than one instance of the *PSVersion keyword if the PPD file
is valid for more than one version (and revision) of the interpreter. For example, if, for a given device, the PPD files for interpreter version 2011 revision
108 and interpreter version 2011 revision 120 are identical, they can be combined into one PPD file with the following statements:
*PSVersion: "(2011) 108"
*PSVersion: "(2011) 120"
For example, imagine a controller called SuperRIP, which can drive two different engines called the S2500 and the S7000. The SuperRIP controller contains interpreter version 2012, and the product name is always SuperRIP,
regardless of which engine is attached to the controller. In this case, there
would be two PPD files: one for the combination of SuperRIP and the S2500
engine, and one for the combination of SuperRIP and the S7000 engine.
These PPD files might be called, respectively, SU2500_1.PPD and
SU7000_1.PPD.
5 Keywords
63
These two PPD files, while matching in *Product and *PSVersion, are differentiated by their *NickName statements and their filenames. A print manager trying
to choose the correct PPD file for a device must take all these things into
account, or it can simply ask the user to select the correct file.
*ShortNickName:
text
64
(9 Feb 1996)
consistent ICC profile matching. See the Microsoft document Image Color
Matching and Printer Drivers in Windows 95 for details on how color profiles are matched to devices and drivers and how the ic.model profile tag is
generated.
5.4
Installable Options
The InstallableOptions group contains one entry for each optional accessory that
the printer can accept. Each entry consists of an *OpenUI/*CloseUI keyword pair,
which surrounds the choices for the accessory. Within the entry, the *Default
keyword initially denotes the state of the accessory in the minimal configuration; that is, whether it is installed or not when the device leaves the factory.
If the state of the accessory can be determined by querying the PostScript
5 Keywords
65
interpreter, there may also be query code, which a print manager operating in
a bidirectional environment could use to update its information about the
devices configuration.
Because there is no need for them to have meaningful names, the main keywords used within the *OpenUI/*CloseUI entries consist of the generic string
*Option followed by an integer; for example, *Option1, *Option2. Each installable
option (each *OpenUI entry) must have a unique main keyword name. The
*UIConstraints section then maps the generic *Option keywords to the actual PPD
feature entries. For example:
*OpenGroup: InstallableOptions/Options Installed
*OpenUI *Option1/Envelope Feeder: Boolean
*DefaultOption1: False
*Option1 True/Installed: ""
*Option1 False/Not Installed: ""
*CloseUI: *Option1
*CloseGroup: InstallableOptions
*UIConstraints: *Option1 False *InputSlot Envelope
The *UIConstraints statement tells a print manager that if *Option1 is False (the
envelope feeder is not installed), then the Envelope option of the *InputSlot key-
66
(9 Feb 1996)
From this entry, a print manager can record that the value of *Option1 is currently True and use that information, in conjunction with the *UIConstraints
entry in the base PPD file, to later decide which other options to offer to the
user at print time. If the author of the print manager does not want to offer a
configuration panel that interacts with the user, the print manager can be
coded so that it looks at the *Default setting and treats it as if it were a selection
from the user. Instead of querying the user for configuration information, the
print manager relies on the *Default settings to be correct. This method is perhaps simpler to implement, but is less flexible for the user and requires that
the user or some application edit a local customization file to record the configuration information.
Most *OpenUI entries in the InstallableOptions group are Boolean choices, as
shown in the previous examples, but PickOne entries are equally legal. For
example, the following entry provides a short list of mutually exclusive
choices (the user can install 2MB or 4MB of memory, but not both at once).
This is also an example of using a named keyword instead of a generic main
keyword:
*OpenGroup: InstallableOptions
*OpenUI *InstalledMemory/Memory Configuration: PickOne
*DefaultInstalledMemory: None
*InstalledMemory None/Basic Memory: ""
*InstalledMemory 2Meg/2Meg Memory Upgrade: ""
*InstalledMemory 4Meg/4Meg Memory Upgrade: ""
*CloseUI: *InstalledMemory
*CloseGroup: InstallableOptions
*UIConstraints: *InstalledMemory None *Smoothing Medium
*UIConstraints: *InstalledMemory None *Smoothing Dark
*UIConstraints: *InstalledMemory 2Meg *Smoothing Dark
This *UIConstraints entry tells a print manager that if None has been selected for
*InstalledMemory, then neither the Medium nor Dark options of the *Smoothing keyword are available, and if 2Meg has been selected for *InstalledMemory, then only
the Dark option of *Smoothing is not available. This provides a way for the print
manager to present various options to the user based on the amount of
memory installed in the printer.
5 Keywords
67
The InvocationValues of the main keywords are typically null quotes because
no code is invoked during configuration; the print manager is simply recording information either from the user or from the *Default statements. However,
in some cases, there may be actual PostScript code between the quotes, perhaps to perform some type of job setup related to the devices configuration.
In that case, the *OpenUI entry must also contain an *OrderDependency statement,
so that the print manager knows where to insert the code in the job stream.
5.5
The keywords in this section provide information about the devices basic
capabilities.
*ColorDevice:
True | False
This keyword indicates whether or not the device physically outputs color.
See *Extensions for information about black and white devices that support the
color extensions to the PostScript language. The value is of type StringValue.
*DefaultColorSpace:
colorspaceOption
This keyword indicates the default native color space of the device. The
native color space is the color space that all colors are converted into before
rendering. The currently registered values for colorspaceOption (a StringValue)
are
CMYThis device uses the cyan-magenta-yellow color space as its native
color space.
CMYKThis device uses the cyan-magenta-yellow-black color space as its
native color space.
RGBThis device uses the red-green-blue color space as its native color
space.
GrayThis device uses a gray-scale native color space.
*Extensions:
extensionOption ...
This keyword indicates that this device supports the PostScript language
extensions listed. One or more extensions may be listed, separated by white
space. Operators specific to each extension are documented in Appendix A of
the PostScript Language Reference Manual, Second Edition.
68
(9 Feb 1996)
*FaxSupport:
faxOption...
If the device can act as a facsimile (fax) device, this keyword lists the various
fax-related capabilities of the device. One or more capabilities can be listed,
separated by white space.
Currently, the only registered value (a StringValue) is
BaseThis device can encode the rasterized version of a document in fax
format and transmit the fax to another fax device.
*FileSystem:
True | False
This StringValue indicates whether or not the PostScript device has the capability for a writable file system. Normally this means the presence of a hard
disk or SCSI controller on the device. This information can be used by a print
manager to determine the capability for internal file system support. Note
that some devices might have the capability for a file system but might not in
fact have a disk installed (in this case the value for this keyword would be
True, but the associated query would return False). The *?FileSystem query can
be used to dynamically determine whether or not a file system is actually
present. If the device has no capability of having a file system, this statement
will be omitted.
*?FileSystem:
query
This query will return True if a writable file system is currently online, False if
not, and Unknown if the state cannot be determined. The results of this query
do not convey any information about whether or not the disk is initialized, or
how many free pages there are. If this device cannot support a file system,
this statement will be omitted.
5 Keywords
69
*LanguageLevel:
int
*Throughput:
int
This QuotedValue is the nominal throughput in pages per minute. It represents the marking engines rated capacity for throughput. It might be used to
determine the fastest of a number of devices if there are many to choose from,
but should not be construed as any kind of benchmark figure.
In the case of roll-fed machines, the number indicates the number of 8-1/2
inch sections of media that can be fed in one minute by the marking engine.
In the case of duplex devices, which can print on both sides of the paper, the
number indicates the number of pages that can be printed in one minute in
simplex (one-sided) mode. If the value is fractional, it is rounded up to the
nearest number (it must be 1 or larger).
*TTRasterizer:
rasterizerOption
This keyword indicates whether or not this device contains software to create
font bitmaps from Type 42 (TrueType ) font outlines. If the device does contain such rasterizer software, the rasterizerOption indicates whether the
software is built into the device, is downloadable, or other details.
The currently registered values (of type StringValue) for rasterizerOption are
NoneThis device does not contain a Type 42 rasterizer and the device is
not capable of receiving a downloaded rasterizer.
Accept68KThis device does not contain a Type 42 rasterizer, but the device
can accept a downloaded rasterizer that is 68000-compatible. A driver
wishing to download a rasterizer should also query the current state of free
VM on the device to determine whether there is enough memory to accept
the rasterizer.
Type42This device contains a Type 42 rasterizer in ROM.
TrueImageThis device contains a TrueImage rasterizer, which accepts the
TrueImage version of a TrueType font.
70
(9 Feb 1996)
*?TTRasterizer:
query
This query returns the rasterizerOption corresponding to the devices capability regarding Type 42 rasterizer software. The value returned must be one
of the rasterizerOptions listed under *TTRasterizer or it will be Unknown. If
Accept68K is returned by this query, a parser should also query the current state
of free VM to determine whether there is enough memory to download the
rasterizer.
*1284Modes
channelOption: mode...
The channelOption must match one of the channel names listed under *Source.
(See section 5.21 for information on *Source.) More than one mode may be
listed in the value field, separated by white space, meaning multiple modes
are supported on that channel. The mode definitions are taken from the 12841994 specification, and are as follows:
CompatCompatibility mode (unidirectional host-to-peripheral parallel
communication). Many older devices support only this mode.
Nibble4-bit reverse (peripheral-to-host) communication
Byte8-bit reverse (peripheral-to-host) communication
ECPExtended Capabilities Port (8-bit bidirectional)
EPPEnhanced Parallel Port (8-bit bidirectional)
Currently, the only channel described by the 1284-1994 specification is
Parallel, but other channels may add support in the future, so other channel
options are permitted. There may also be variations of Parallel on a device,
such as ParallelB for a second parallel channel.
5 Keywords
71
*1284DeviceID:
"text"
For a device that is compliant with the IEEE 1284-1994 specification mentioned under *1284Modes, the QuotedValue of this keyword provides the
Device ID string returned by the device. For example:
*1284DeviceID: "MFG:Acme;MODEL:SuperSpiffy;COMMAND SET: POSTSCRIPT,PJL,PCL
If the device does not return a valid string in response to a request for
Device ID, this statement will be omitted from the PPD file.
5.6
*PatchFile:
System Management
invocation
This keyword requires the *Password value to be supplied in front of the invocation.
72
(9 Feb 1996)
*?PatchFile:
query
This query checks the key set by the code in *PatchFile and returns True if the
patch file is present behind the server loop, and False if it is not. This allows a
print manager to decide whether it is necessary to download the patch file
outside the server loop as a separate job. The patch files presence is determined by the presence or absence of a certain key in a dictionary, or by any
other method that the implementor of the patch file chooses. If a patch file is
implemented, a patch file query must be provided.
*JobPatchFile
int: invocation
*FreeVM:
int
This keyword gives the maximum amount of memory available for use by a
PostScript language job in the products minimal memory configuration. The
QuotedValue is the integer returned by the PostScript language sequence
vmstatus exch sub == pop
5 Keywords
73
*VMOption
vmOption: int
This keyword provides potential values of the *FreeVM keyword with various
optional memory (VM) configurations installed. The values are obtained by
inserting each additional memory module, one at a time, and recording the
value returned by the code fragment listed in the description of *FreeVM.
The vmOption None denotes the basic, standard memory configuration, with no
additional memory upgrades. The other vmOptions must match the vmOptions in
the *InstalledMemory entry, and are generally of the form 2Meg or 2MB, denoting
the size of the total installed memory. The value, although in the form of an
InvocationValue, must be an integer.
A PPD file with a *VMOption entry must also have a *FreeVM statement. At least
one *VMOption statement must contain the same value as the *FreeVM statement.
For example, the following entry indicates that the standard configuration
contains 100,000 bytes of free memory at boot time, while the upgrade called
2Meg provides 1,100,000 bytes of free memory:
*FreeVM: "100000"
*VMOption None/Standard: "100000"
*VMOption 2Meg: "1100000"
Note
*InstalledMemory
*DefaultInstalledMemory:
*?InstalledMemory:
To builders of PPD files: PPD files with *FormatVersion statements greater than
4.1 should not have *UIConstraints between an installable memory module and
*VMOption. This method is obsolete. Instead, there should be *InstalledMemory
entries in the InstallableOptions group for each additional amount of memory.
*InstalledMemory is automatically linked to *VMOption by the use of identical
option keywords, so there is no need for *UIConstraints on *VMOption.
vmOption: "invocation"
U
UII
vmOption | Unknown
query
sponds to the current memory configuration. Note that this is not the amount
of free VM, but an indicator of the physical memory installed.
74
(9 Feb 1996)
The print manager could then take the users selection (lets say it was 4MB)
and search the following statements to find out how much VM would be provided by the 4MB option:
*VMOption 2MB: "1234567"
*VMOption 3MB: "2345678"
*VMOption 4MB: "3456789"
5 Keywords
75
*Reset:
invocation
*Password:
invocation
*ExitJamRecovery
*DefaultExitJamRecovery:
*?ExitJamRecovery:
U
UII
"query"
This keyword provides the code to invoke the exit jam recovery feature. If
True, pages that jam in the exit path are reprinted. If False, jammed pages are
not reprinted, which may result in a performance improvement because more
overlapping of page processing is possible. *DefaultExitJamRecovery denotes the
default state. *?ExitJamRecovery returns the current state.
*ExitServer:
invocation
This keyword requires the *Password value to be supplied in front of the invocation.
76
(9 Feb 1996)
*SuggestedJobTimeout:
"int"
This QuotedValue provides the time, in seconds, that the device manufacturer
suggests for the value of the user parameter JobTimeout (Level 2) or the argument to setjobtimeout (Level 1). This value may be the default value set in the
device at the factory, or it may be an alternative to the factory-set value, provided for performance or other reasons. This keyword is intended for print
managers that allow the user to change the job timeout value; it provides an
initial value for display to the user.
*SuggestedManualfFeedTimeout:
"int"
This QuotedValue provides the time, in seconds, that the device manufacturer
suggests for the value of the page device parameter ManualFeedTimeout (Level
2) or the argument to setmanualfeedtimeout (Level 1). This value may be the
default value set in the device at the factory, or it may be an alternative to the
factory-set value, provided for performance or other reasons. This keyword is
intended for print managers that allow the user to change the manualfeed
timeout value; it provides an initial value for display to the user.
*SuggestedWaitTimeout:
"int"
This QuotedValue provides the time, in seconds, that the device manufacturer
suggests for the value of the user parameter WaitTimeout (Level 2) or the argument to setwaittimeout (Level 1). This value may be the default value set in the
device at the factory, or it may be an alternative to the factory-set value, provided for performance or other reasons.This keyword is intended for print
managers that allow the user to change the wait timeout value; it provides an
initial value for display to the user.
*PrintPSErrors:
True | False
This StringValue indicates to a print manager whether or not the device manufacturer thinks that PostScript interpreter error information should be
printed on the device. Printing interpreter error information is appropriate on
some devices, but not on others. If True, the device manufacturer suggests that
printing interpreter error information is appropriate for this device. A print
manager may, of course, let the user override this suggested setting; this keyword is intended to provide default behavior for a print manager, and a value
for initial display to the user if the behavior is to be changed.
Note
5 Keywords
77
*DeviceAdjustMatrix:
[ transformation matrix ]
This QuotedValue provides a device-specific transformation matrix to compensate for any anamorphic scaling or offset problems inherent in the underlying mechanical marking device. If the device has no such problems, the
value of *DeviceAdjustMatrix is the identity matrix [1 0 0 1 0 0], and the entire
statement will be omitted from the PPD file.
A system administrator might need to add *DeviceAdjustMatrix to a local customization file for a particular device to compensate for slight shrinkage or magnification caused by motor speeds, media thicknesses, and so on. See section
2.6 for information on local customization files.
Note
5.7
The *ImageableArea figures given in the PPD files will no longer be exactly
accurate if the device matrix is adjusted. Bear in mind, if this field is
changed, any operations sensitive to the page boundaries might have to be
recomputed slightly, or the results might be off the page.
Emulations and Protocols
The keywords in this section provide information about emulators and protocols supported by the device.
*Protocols:
protocolOption ...
78
(9 Feb 1996)
Note
PPD files that conform to specification version 4.1 and higher and that contain this statement will also contain the *JCL keywords that provide the appropriate PJL language switching sequences. In version 4.0 PPD files, the *JCL
keywords do not exist and the print manager must provide the appropriate
PJL commands.
TBCPThis device supports the tagged binary communications protocol,
as documented in section 4 of Technical Note #5009, Adobe Serial and
Parallel Communications Protocols Specification, available from the
Adobe Developers Association.
*Emulators:
emulatorOption ...
This keyword provides a StringValue that enumerates the emulators that can
be invoked from within a PostScript language job on this device. The value
consists of one or more emulatorOption keywords, separated by white space.
For each emulatorOption listed under *Emulators, there must also be corresponding main keywords that describe the command sequence necessary to start
and stop the emulator named emulatorOption. These main keywords are formed
by concatenating the strings *StartEmulator_ and *StopEmulator_ with the
emulatorOption string. This odd syntax allows the values to be QuotedValues.
For example:
*Emulators: hplj proprinter
*StartEmulator_hplj: "code"
*StopEmulator_hplj: "code"
*StartEmulator_proprinter: "code"
*StopEmulator_proprinter: "code"
An emulatorOption must appear in a *Emulators statement before the corresponding *StartEmulator_ and *StopEmulator_ keywords appear.
The currently registered option keywords for emulatorOption are
diablo630Diablo 630
decppl3Digital ANSI-Compliant Printing Protocol (level 3)
hpglHewlett Packard Graphics Language
hpljHewlett Packard LaserJet and LaserJet Plus (HP-PCL)
proprinterIBM ProPrinter
ti855Texas Instruments 855
5 Keywords
79
*StartEmulator_emulatorOption:
invocation
This QuotedValue provides the PostScript language code to invoke the emulator named emulatorOption, from within the current job. The invocation is represented as a QuotedValue in case the invocation code contains 8-bit control
characters, which must be represented as hexadecimal substrings. This keyword is formed by concatenating the string *StartEmulator_ with the string from
the list of valid emulatorOptions listed under *Emulators.
The code in the QuotedValue must end with a space or newline, so that the
final PostScript language token is executed. Any data sent by the print manager following the invocation code will be executed by the named emulator.
For example:
*Emulators: hplj
*StartEmulator_hplj: "currentfile
/hpcl statusdict /emulate get exec "
*End
Before invoking any emulators, a clear channel must be established. See the
description of the keyword *Protocols for more information about establishing
a clear channel.
Note
*StopEmulator_emulatorOption:
Before beginning an emulation, most emulators will erase the current page,
initialize the graphics state, and clear the operand and execution stacks.
hexadecimal data
This QuotedValue provides the data needed to exit the emulator named
emulatorOption and return to PostScript interpretation. The invocation is represented as a QuotedValue because typically the code contains control characters, which must be represented as hexadecimal substrings.These
hexadecimal substrings should be parsed by the print manager, and the appropriate 8-bit characters should be sent to the device.
This keyword is formed by concatenating the string *StopEmulator_ with the a
string from the list of valid emulatorOptions listed under *Emulators. For example:
*Emulators: hplj
*StartEmulator_hplj: "currentfile
/hpcl statusdict /emulate get exec "
*End
*StopEmulator_hplj: "<1B7F>0"
80
(9 Feb 1996)
5.8
On some devices, certain features can be accessed only through a job control
language (JCL), which is managed independently from the PostScript language interpreter. Keywords pertaining to such features are referred to
throughout this document as *JCL keywords. A typical job that accesses certain features via JCL code would contain these components in this order:
the code from *JCLBegin, which starts the JCL job
the code, if any, to change the desired feature, such as *JCLResolution or
*JCLFrameBufferSize
*JCLBegin:
"JCL"
*JCLToPSInterpreter:
"JCL"
*JCLEnd:
"JCL"
5 Keywords
81
*JCLOpenUI
*JCLCloseUI:
These keywords are identical to the *OpenUI/*CloseUI keywords (see section 5.2
for a description), except that they are used to enclose only *JCL keywords.
Like keywords for other selectable features, JCL keywords affect the user
interface, and as such must be presented to the user in a consistent fashion.
All JCL keywords that provide the user with selectable features will be
enclosed in the *JCLOpenUI/*JCLCloseUI keywords. If a print manager does not
wish to offer selection of features via JCL to the user, the parser can simply
skip all sections of the PPD file that are bracketed by *JCLOpenUI/*JCLCloseUI.
*JCLFrameBufferSize
*DefaultJCLFrameBufferSize:
*?JCLFrameBufferSize:
frameBufferOption: "JCL"
frameBufferOption | Unknown
"query"
*JCLFrameBufferSize provides the JCL code to change the frame buffer size.
Note that requesting a larger frame buffer size means that less memory is
available for resources such as downloaded fonts.
Although the value looks like an InvocationValue, the *JCL keywords have
special parsing rules and such values are treated like QuotedValues. This is
because the values may contain out-of-range byte codes in hexadecimal
strings, which the print manager must translate before emitting to the job
stream.
The values for frameBufferOption are device-specific. One of the options must be
Off, with a corresponding QuotedValue that sends the JCL code to turn off the
ability to set the frame buffer size. The results of this action are devicedependent. Other possibilities for options include any of the media size
options supported by the device, with the corresponding JCL code requesting
the frame buffer size appropriate for that media size. See section 5.13 for a
description of media option keywords.
82
(9 Feb 1996)
Note
On some devices, setting the frame buffer size may cause the devices memory
to be reinitialized, removing anything that had previously been downloaded
outside the server loop (at save level 0). For example, downloaded fonts, patterns, prologs, forms, and other downloaded resources would be removed
from the devices memory.
Here is an example of the frame buffer size keywords in a PPD file:
*JCLOpenUI *JCLFrameBufferSize/Frame Buffer Size: PickOne
*DefaultJCLFrameBufferSize: Letter
*OrderDependency: 20 JCLSetup *JCLFrameBufferSize
*JCLFrameBufferSize Off: '@PJL SET PAGEPROTECT = OFF<0A>'
*JCLFrameBufferSize Letter: '@PJL SET PAGEPROTECT = LTR<0A>'
*JCLFrameBufferSize Legal: '@PJL SET PAGEPROTECT = LGL<0A>'
*JCLCloseUI: *JCLFrameBufferSize
*JCLResolution
*DefaultJCLResolution:
*?JCLResolution:
resolutionOption: "JCL"
resolutionOption | Unknown
query
*JCLResolution provides the JCL code to change the resolution. There is one
statement for each resolution supported by the device. For a complete explanation of resolutionOption and its possible values, see the description of
*DefaultResolution in section 5.9.
Although the value looks like an InvocationValue, the *JCL keywords have
special parsing rules and such values are treated like QuotedValues. This is
because the values usually contain out-of-range byte codes in hexadecimal
strings, which the print manager must translate before emitting into the job
stream.
Note
On some devices, setting the resolution may cause the devices memory to be
reinitialized, removing anything that had previously been downloaded outside the server loop (at save level 0). For example, downloaded fonts, patterns, prologs, forms, and other downloaded resources would be removed
from the devices memory.
5 Keywords
83
This section contains keywords that control the resolution and related appearance characteristics of the device.
*DefaultResolution:
resolutionOption | Unknown
This statement provides the default resolution of the device. The resolution is
measured in dots (spots) per linear inch, in both x and y dimensions, in PostScript default user space. The value resolutionOption must be a string either of
the form 300dpi or of the form 300x300dpi, or it can be Unknown if the resolution
cannot be determined at power-up. If *DefaultResolution is part of an entry, the
value of resolutionOption appearing here must be a valid resolution listed under
*SetResolution or *Resolution.
If the format of resolutionOption is 300x300dpi, this signifies that the device supports anamorphic resolution; that is, the resolution in the x dimension can be
different from the resolution in the y dimension. For example, a printer might
support a resolution of 300x600dpi. The first number denotes the resolution in
the x dimension; the second number denotes the resolution in the y dimension. The x in the middle is a convenient separator, and the dpi signifies
dots per inch. This format should be used only for a device that supports
anamorphic resolution.
The format 300dpi is a shorthand form of 300x300dpi and means that the resolution is the same in both the x and y dimensions (the device does not support
anamorphic resolution). This is the most common format found in PPD files.
84
(9 Feb 1996)
The format of resolutionOption used by *DefaultResolution must be used consistently wherever a resolutionOption appears. The two formats 300dpi and
300x300dpi cannot be intermixed in a PPD file.
Note
*Resolution
Builders of PPD files: If the device has only one resolution, *DefaultResolution
may appear by itself, without *Resolution, *SetResolution, or any *OpenUI/*CloseUI
bracketing. See section 3.2 and section 4.5 for information on stand-alone
default keywords.
resolutionOption: invocation
U
UII
For devices that support resolution changes from within a PostScript language job, this keyword will provide the proper InvocationValue for each resolution supported by the device. There can be several of these statements, if
the PostScript device supports multiple selectable resolutions. The string
resolutionOption is of the form specified in the *DefaultResolution statement. Print
managers need to ensure that any resolution changes occur before the page
size is selected.
Note
*SetResolution
resolutionOption: invocation
For devices that support resolution changes from software and require that
the resolution be changed outside the server loop, in initial virtual memory,
this keyword will provide the proper InvocationValue for each resolution supported by the device. There can be several of these statements, if the PostScript device supports multiple selectable resolutions. The string
resolutionOption is of the form specified under *DefaultResolution. Print managers
need to ensure that any resolution changes occur before the page size is
selected. Please see the comments on daggered keywords at the end of section 4.1 for a list of the additional responsibilities of the builder of the PPD
file and of print manager authors.
Note
To builders of PPD files: *SetResolution should be present only in the PPD files
of devices that require a password to change the resolution. Devices that do
not require a password to change the resolution should use *Resolution.
This keyword requires the *Password value to be supplied in front of the invocation.
5 Keywords
85
*?Resolution:
query
This query returns a string denoting the current resolution of the device. The
returned value will be a string in the format specified by *DefaultResolution,
including the string dpi, or it will be Unknown. The resolution returned must
be a valid resolution listed under *SetResolution or *Resolution, if those entries
are present. Upon device power-up, downloading the *?Resolution code to the
device should return the value of *DefaultResolution.
*Smoothing
*DefaultSmoothing:
*?Smoothing:
smoothOption: invocation
U
UII
smoothOption | Unknown
query
ing the edges of text and graphics after they have been rendered by the
device. This is also sometimes referred to as bit smoothing, anti-aliasing,
or resolution enhancement, Option keywords describe the level of smoothing. One of the options must be None or False to turn off smoothing.
The currently registered values for smoothOption are:
NoneNo smoothing.
LightTurn on light smoothing.
MediumTurn on medium smoothing
DarkTurn on dark smoothing
TrueTurn on smoothing (for a device that has only a binary setting).
FalseTurn off smoothing (for a device that has only a binary setting).
*DefaultSmoothing denotes the default state of the smoothing mechanism.
*?Smoothing returns a string that denotes the current state of the smoothing
mechanism.
86
(9 Feb 1996)
*BitsPerPixel
*DefaultBitsPerPixel:
*?BitsPerPixel:
depthOption: invocation
U
UII
depthOption | Unknown
query
that should be used to represent a color when rendering the job on the device.
The currently registered values for depthOption are:
None, Off, FalseUsed to represent the lowest number of bits per pixel,
which is typically 1.
On, TrueUsed with Off and False respectively when this feature has only
two states. Represents the highest number of bits per pixel available.
2Use 2 bits per pixel.
4Use 4 bits per pixel.
8Use 8 bits per pixel.
*DefaultBitsPerPixel denotes the default state of color depth. *?BitsPerPixel returns
*AccurateScreensSupport:
True | False
*ContoneOnly
True | False
This StringValue indicates the continuous tone capabilities of the device. This
keyword only appears if the device can reproduce color (including grayscale)
as continuous tones. True means the device can reproduce color and grayscale
only as continuous tones; it cannot halftone. False means the device can reproduce color and grayscale either as continuous tones or halftones. The absence
of this keyword means that the device cannot produce continuous tones at all,
but can only produce halftones. An application can use this information to
decide whether or not to download special halftone dictionaries, or whether
to even offer this capability to the user. There is no point in downloading halftone dictionaries if *ContoneOnly is True.
5 Keywords
87
*DefaultHalftoneType:
int
This StringValue is the integer value of HalftoneType in the default Halftone dictionary. This keyword applies only to Level 2 devices. This keyword is
present only if the device is capable of halftoning and if the default state of
the device is to produce halftones rather than continuous tone color.
(*ContoneOnly:True and *DefaultHalftoneType may not appear in the same file.)
*DefaultHalftoneType provides a hint to the print manager about the accuracy of
the values for *ScreenFreq, *ScreenAngle, and *DefaultScreenProc. See their descrip-
*ScreenAngle:
real
*ScreenFreq:
real
*DefaultScreenProc:
spotOption
These keywords provide the default halftone screen angle, frequency, and
spot function, respectively. On Level 1 devices, these values are the angle,
frequency, and proc arguments returned by the currentscreen operator after powering on the device. On Level 2 devices, only a type 1 halftone dictionary can
be easily represented by these keywords. Therefore, if the value of
*DefaultHalftoneType is 1, or if *DefaultHalftoneType is not present, these values are
the Frequency, Angle, and SpotFunction entries in the default Halftone dictionary.
If the value of *DefaultHalftoneType is anything other than 1, the values of
*ScreenAngle, *ScreenFreq, and *DefaultScreenProc may be meaningless and application authors may not want to rely on them for anything important.
88
Note
Note
Some older PPD files for Level 2 devices may need to have these values corrected. Prior to the 4.3 version of this specification, there was no requirement
that these values represent the Frequency, Angle, and SpotFunction entries in the
default Halftone dictionary in a Level 2 device, and if sethalftone was use to set
these values, the currentscreen operator used to build the PPD files would not
have returned the correct values.
(9 Feb 1996)
*ResScreenFreq
resolutionOption: "real"
*ResScreenAngle
resolutionOption: "real"
*ScreenProc
spotOption: { procedure }
5 Keywords
89
*Transfer
*DefaultTransfer:
transferOption: { procedure }
Null | Factory
*Transfer provides InvocationValues for possible transfer functions, which may
be invoked with the operators settransfer, setcolortransfer, and sethalftone (Level
To print manager authors: When transfer functions are used at the PostScript
language level, always concatenate the transfer function with the existing
one, rather than replacing it. See section 6.3 of the PostScript Language Reference Manual, Second Edition for more information about transfer functions
and their uses.
The currently registered values for transferOption are:
NullThis is provided to indicate a null procedure body for the transfer
function. A null procedure body is represented in the PostScript language
as a pair of curly braces, { }.
90
(9 Feb 1996)
FactoryFor a monochrome device that ships from the factory with a builtin non-null transfer function, this option lists the transfer function built
into the device.
NormalizedFor a monochrome device, this provides a normalized transfer
function to obtain true optical gray densities. For a color device, the Normalized option provides the transfer function to correct the gray values on
an RGB device and the black colorant on a CMYK device.
RedFor a color device, this provides a normalized transfer function to
correct the red colorant on an RGB device or the cyan colorant on a
CMYK device.
GreenFor a color device, this provides a normalized transfer function to
correct the green colorant on an RGB device or the magenta colorant on a
CMYK device.
BlueFor a color device, this provides a normalized transfer function to
correct the blue colorant on an RGB device or the yellow colorant on a
CMYK device.
Any of these transfer option keywords can also have the .Inverse qualifier or a
serialization qualifier to distinguish it from other options. Inversion is typically performed by appending 1 exch sub to the existing transfer function, but
an inverse normalized function can be much more complex.
On monochrome devices, *DefaultTransfer provides the built-in transfer function, as returned by the currenttransfer operator immediately after powering up
the device. Most devices ship with a null default transfer function.
5.11
Color Adjustment
*BlackSubstitution
*DefaultBlackSubstitution:
*?BlackSubstitution:
U
UII
query
5 Keywords
91
*ColorModel
*DefaultColorModel:
*?ColorModel:
colormodelOption: invocation
U
UII
colormodelOption | Unknown
query
*ColorRenderDict
dictOption: invocation
92
(9 Feb 1996)
The name will also typically have a translation string. For example:
*ColorRenderDict Saturated.6x6Transparency.Dot/Saturated Color, 600x600 dpi, Transparency, Dot:
"/Saturated.6x6Transparency.Dot /ColorRendering findresource setcolorrendering"
*End
An application might provide the list of built-in CRDs to the user for selection, so a meaningful translation string is important. See *RenderingIntent,
*PageDeviceName, and *HalftoneName for more information on the components of
a CRD name.
In addition, if a user wants to supply new CRDs that are not built into the
device, new instances of this keyword can be added to a local customization
PPD file for a given device. This is rarely used because it greatly increases
the size of the PPD file. For a new CRD in a local customization file, the
*ColorRenderDict code would have to create the CRD, fill it with the appropriate
values for color calibration, and invoke the CRD with setcolorrendering. If the
CRD is to be made available for future use as a resource, the appropriate
defineresource code and any other necessary procedures must also be included.
Note
*RenderingIntent:
string
This keyword provides the list of rendering intents supported by the device.
At minimum, all of the intents named in the built-in CRDs must appear here,
as StringValues. These should correspond to the first component of each
dictOption listed under *ColorRenderDict. The manufacturer may also choose to
list any additional built-in intents.
Here is an example, listing the four standard rendering intents:
*RenderingIntent:
*RenderingIntent:
*RenderingIntent:
*RenderingIntent:
AbsoluteColorimetric
RelativeColorimetric
Saturation
Perceptual
For more information on the name components of color rendering dictionaries, see section 5.4, CRD Selection Based on Rendering Intent, in the PostScript Language Reference Manual Supplement for Version 2015, available
from the Adobe Developers Association.
5 Keywords
93
*PageDeviceName:
string
This keyword provides the list of device setups (page device names) supported by the device. At minimum, all of the device setups named in the builtin CRDs must appear here, as StringValues. These should correspond to the
second component of each dictOption listed under *ColorRenderDict. The manufacturer may also choose to list any additional built-in page device names.
These page device names must correspond either to instances of the
setpagedevice key PageDeviceName, or to the list of names returned by the builtin procedure GetPageDeviceName, or the list may include all of the above
names.
For example:
*PageDeviceName: 6x6Transparency
*PageDeviceName: 3x3Transparency
*PageDeviceName: Paper
For more information on the name components of color rendering dictionaries, see section 5.4, CRD Selection Based on Rendering Intent, in the PostScript Language Reference Manual Supplement for Version 2015, available
from the Adobe Developers Association.
*HalftoneName:
string
This keyword provides the list of halftone names supported by the device. At
minimum, all of the halftones named in the built-in CRDs must appear here,
as StringValues. These should correspond to the third component of each
dictOption listed under *ColorRenderDict. The manufacturer may also choose to
list any additional built-in halftone names. These halftone names must correspond either to instances of the Halftone dictionary key HalftoneName, or to the
list of names returned by the built-in procedure GetHalftoneName, or the list
may include all of the above names.
For example:
*HalftoneName: ScatterDot
*HalftoneName: QuadDot
For more information on the name components of color rendering dictionaries, see section 5.4, CRD Selection Based on Rendering Intent, in the PostScript Language Reference Manual Supplement for Version 2015, available
from the Adobe Developers Association.
Note
94
(9 Feb 1996)
PPD files are most commonly used to take advantage of the different media
sizes supported by a device. There are many devices on the market and many
different sizes and types of media and finishing features supported on each
device. The actual invocation code for a particular type of media often varies
from one device to anotherit might require the use of the operator
setpageparams on one device, setpapertray on another, and setpagedevice on a
third. The keywords in the next several sections are used to address the issues
of choosing the input media, selecting a method of output, and requesting
various finishing features.
In many instances, what the user wants is please print this on ledger paper,
where the user does not care from which tray the paper comes. For this situation, there is a keyword, *PageSize, whose corresponding invocation code
selects a tray that contains the requested size of paper. Unless there are special media handling needs, print managers should use the *PageSize keyword
to request media.
For more control over the media handling capabilities, there are keywords for
directly selecting the input slots, the output bins, the output order of the
pages, the imageable area of a given page, and finishing features, such as stapling. Each of these has a specific use that might be needed beyond the notion
please give me ledger paper. For instance, if the manual feed feature is
used, the *PageRegion keyword should be used to set up an imageable area for
the manually fed sheet of paper.
Note
The author of a print manager should assume that all media handling
requests (requests for a particular page size, media tray, and so on) will initiate a new, blank page. That is, assume that a request for a media handling
feature will clear the frame buffer and perform the equivalent of the
PostScript language operators initgraphics and erasepage. This does not
happen on all PostScript Level 1 devices, but is true for all PostScript Level 2
devices, and to be safe, you should assume it will happen on all Level 1
devices. Print managers should ensure that all media handling requests are
placed in the output file before any page manipulation is performed, before
any marks are made on the page, and outside of any page-level save.
A primary use of a PPD file is for a print manager to be able to determine a
list of all supported media types and to be able to determine the salient features of each page size (for example, the media dimensions and the imageable area). This list can then be displayed to the user in a user interface, or
consulted by the print manager when a user requests a certain page size.
5 Keywords
95
In addition to the keywords that supply invocation code for the various media
types, there are keywords that provide information about each media size. For
example, the physical media dimensions are described by the *PaperDimension
keyword, and the actual area of the page which is writable by the PostScript language interpreter is described by the *ImageableArea keyword.
5.13
Media Selection
The keywords in this section allow the user to control the selection of media
by specifying characteristics such as page size, input slot, media type, media
color, and other attributes.
96
(9 Feb 1996)
*InputSlot
*DefaultInputSlot:
*?InputSlot:
inputSlotOption: invocation
U
UII
inputSlotOption | Unknown
query
Any arbitrary strings that appropriately describe the devicess input slots are
valid inputSlotOptions. The following list documents commonly used
inputSlotOptions. For Windows print managers, Microsoft has defined C language constructs called #defines, which are used to match Windows application requests for input slots to the inputSlotOption names in PPD files. If one
exists, the appropriate #define is listed in the inputSlotOption description, for use
by print managers. Builders of PPD files are encouraged to use these standard
inputSlotOption names so that Windows print managers can correctly match
application requests to input slots:
LowerThis is used for any tray which has no particular distinguishing feature other than it is lower than another tray similar to it.
#define: DMBIN_LOWER
MiddleThis designates a tray that is between other trays. See Lower.
#define: DMBIN_MIDDLE
UpperThis designates a tray that is above other trays. See Lower.
#define: DMBIN_UPPER
RearThis designates a tray at the rear of the device.
EnvelopeThis denotes an envelope tray. #define: DMBIN_ENVELOPE
CassetteThis keyword can be used where Upper, Middle, and Lower make
little sense (for example, if there is only one input slot, or if the printer is a
roll-fed device). Since many print managers display the choices of input
slot and manual feed on a single menu, Cassette provides differentiation for
the user between the paper or film cassette and the manual feed slot, if one
exists. #define: DMBIN_CASSETTE
LargeCapacityThis is used to refer to a large capacity media tray, such as an
input paper tray that can hold more than one ream of paper.
#define: DMBIN_LARGECAPACITY
5 Keywords
97
The code fragments would select the manual feed slot and set up the printer
(perhaps adjusting color densities) to print on paper or transparency, respectively.
Note
Note
To builders of PPD files: The *InputSlot entry is not required. However, even if
there is only one input slot, a minimal *InputSlot entry is usually included. This
allows the manufacturer to dictate the slot name (as an option keyword or
translation string) for a print manager to display, rather than using the print
managers default choice of a slot name. Cassette is the most commonly used
name for single-slot or roll-fed devices. For example:
*OpenUI *InputSlot: PickOne
*OrderDependency: 20 AnySetup *InputSlot
*DefaultInputSlot: Cassette
*InputSlot Cassette: ""
*CloseUI: *InputSlot
98
(9 Feb 1996)
*ManualFeed
*DefaultManualFeed:
*?ManualFeed:
U
UII
query
*ManualFeed provides the InvocationValue to turn manual feed on (True) and off
(False). *DefaultManualFeed denotes the default state of the manualfeed mechanism. *?ManualFeed returns the current state of the manual feed mechanism.
Some manufacturers prefer to handle the manual feed slot as a regular input
slot, naming one of the *InputSlot options Manual or ManualFeed and invoking
manual feeding in the code for that option. In this case, *ManualFeed should not
be present, as that would cause a print manager to offer the user two different
methods of choosing manual feed, which would be confusing.
Note
*PageSize
*DefaultPageSize:
*?PageSize:
mediaOption: invocation
U
UII
mediaOption | Unknown
query
for a certain size of media, with no special handling of media requested (for
example, the user says, give me legal size paper, but does not care which
tray is used). *PageSize is intended to be used in all but very specific circumstances (such as when using manual feed or when directly controlling a
media tray).
5 Keywords
99
Note
Note
*PageRegion
*DefaultPageRegion:
mediaOption: invocation
U
UII
mediaOption | Unknown
options) for the device when powered on. Since there can be only one default
page size, this value should be the same as the value of *DefaultPageSize,
*DefaultImageableArea, and *DefaultPaperDimension.
100
Note
Note
(9 Feb 1996)
*MediaType
*DefaultMediaType:
*?MediaType:
typeOption: invocation
U
UII
typeOption | Unknown
query
*MediaType provides the InvocationValue to select media by some characteristic other than size (or in addition to size). The typeOptions are product-dependent strings that describe the media. For example, a user might be able to
select letterhead paper by specifying Letterhead as a media type. This method
usually requires prior device setup, so that the device knows how to access a
certain type of media. *DefaultMediaType provides the default media type.
*?MediaType returns the current media type.
*MediaColor
*DefaultMediaColor:
*?MediaColor:
colorOption: invocation
U
UII
colorOption | Unknown
query
*MediaWeight
*DefaultMediaWeight:
*?MediaWeight:
weightOption : invocation
U
UII
weightOption | Unknown
query
weights. This method of media selection usually requires prior device setup,
so that the device knows how to access a certain weight of media.
*DefaultMediaWeight provides the default media weight. *?MediaWeight returns the
current media weight.
5 Keywords
101
5.15
The keywords in this section provide information about the media sizes that
are available on the device. They do not invoke any device features.
*ImageableArea
*DefaultImageableArea:
Required. *ImageableArea provides the bounding box of the imageable area for
the page size named mediaOption. There will be one statement for each named
page size supported by the device. *DefaultImageableArea provides the
mediaOption name of the default imageable area. Since there can be only one
default page size, this value should be the same as the value of
*DefaultPageSize, *DefaultPageRegion, and *DefaultPaperDimension.
The bounding box value of *ImageableArea is given as four real numbers, representing the x and y coordinates of the lower left and upper right corners of the
region, respectively, in the PostScript language default user space coordinate
system. The x and y axes of a given page size correspond to the x and y axes
of that page size in the *PaperDimension entry.
The imageable region is defined as the part of the page where marks can actually be made. On many devices, there are margins imposed by the media
transport mechanism in the marking engine that might prevent marks from
being made close to the edges of the media. The *ImageableArea entry will
supply a region that represents a reliable area of the page in which marks
can be made. This might exactly correspond to the clipping path set by the
PostScript interpreter. The value is represented as an InvocationValue.
On some devices, the imageable area of a given page size varies as a result of
the current resolution, amount of memory, the direction of paper feed, and
other factors. For example, the imageable area of a Legal size page might be
smaller at higher resolutions on a printer with variable resolution, or it might
be shifted left or right depending on whether the page was fed long-edge-first
or short-edge-first. In PPD files where the imageable area of a given page
size can vary depending on other factors, the imageable area recorded for that
page size will be the intersection of all possible imageable areas for that page
size. While this means that the imageable area available in the current configuration might actually be larger than the imageable area shown in the PPD
file, it at least guarantees that the available imageable area will not be smaller
than that shown in the PPD file, and all marks made within the given imageable area will be visible.
102
(9 Feb 1996)
Note
*?ImageableArea:
To builders of PPD files: On devices that support multiple page sizes, the
value of *DefaultImageableArea will often be Unknown, as it may be impossible to
predict which media tray will be inserted or designated as the default tray.
Also, read the end of section 5.13 for a discussion of translation strings on
media option keywords.
query
This query returns a string composed of four real numbers representing the
bounding box of the imageable area, as defined under *ImageableArea. Since it
is virtually impossible to determine hardware restrictions from software polling, this query will usually return the default clipping region for the page size
in effect. In general, it is better for a print manager to use the values supplied
by the *ImageableArea statements, since they can be adjusted by hand for particular hardware constraints.
*PaperDimension
*DefaultPaperDimension:
mediaOption | Unknown
Required. The InvocationValue of *PaperDimension lists the physical dimensions of a particular media size, independent of the imageable area of the
page. There are only two numbers specified, which represent the width (in the
x dimension) and height (in the y dimension) of the media, respectively, in
PostScript default units. The x and y axes of a given page size correspond to
the x and y axes of that page size in the *ImageableArea entry.
*DefaultPaperDimension provides the mediaOption name of the default physical
media dimension. Since there can be only one default page size, this value
should be the same as the value of *DefaultPageSize, *DefaultPageRegion, and
*DefaultImageableArea.
Note
*RequiresPageRegion
To builders of PPD files: On devices that support multiple page sizes, the
value of *DefaultPaperDimension will often be Unknown, as it may be impossible to
predict which media tray will be inserted or designated as the default tray.
Also, read the end of section 5.13 for a discussion of translation strings on
media option keywords.
This keyword provides a StringValue that indicates, for each input slot,
whether or not the *PageRegion invocation code must be sent with the *InputSlot
invocation code when the user requests media from that input slot. For example, if the device cannot sense what page size is installed in a given input slot,
5 Keywords
103
An additional special option keyword All means that the statement applies to
all media sources on the device. For example:
*RequiresPageRegion All: False
This statement indicates that the *PageRegion code is never required after an
input slot invocation.
If *RequiresPageRegion for any slot (or all slots) is omitted from a PPD file, it is
assumed to be False for those slots. That is, the *PageRegion code should not be
invoked after an input slot invocation.
*LandscapeOrientation:
Every print manager makes assumptions about the location of the origin of
default user space on the physical page. When a user selects landscape orientation, a print manager must rotate and translate the origin of default user
space on the page. On certain printers, the orientation of the physical page is
dictated by either physical markings on the printer case, or by instructions in
the user manual. This dictated orientation might be incompatible with the
print manager's assumptions about the orientation of the physical page. This
is not significant for blank paper, but for pre-marked paper, such as letterhead, 3-hole-punched paper, or envelopes, the printed output might appear
upside-down with respect to the letterhead, punch holes, envelope flap, or
other pre-markings on the page.
This keyword, whose StringValue is determined from knowledge of the
printer's markings and instructions, provides a hint to a print manager about
which way it should rotate and translate the page, for the printed output to be
104
(9 Feb 1996)
compatible with the page feeding instructions on the printer or in the printer's
user manual. If this keyword is present, it means that the printer requires the
use of the transformations listed below for the correct printing results to
occur.
The values have the following meanings:
Plus90This means that the print manager should perform the functional
equivalent of the following fragment of PostScript language code:
90 rotate 0 pagewidth neg translate
where pagewidth is the width of the page in default user space. For example, on a letter-size page in portrait mode, after this transformation has
been performed, the default user space would look like this:
+x
+y
Minus90This means that the print manager should perform the functional
equivalent of the following fragment of PostScript language code:
90 neg rotate pageheight neg 0 translate
where pageheight is the height of the page in default user space. For example, on a letter-size page in portrait mode, after this transformation has
been performed, the default user space would look like this:
+y
+x
5 Keywords
105
AnyThis means that no hint is provided and the driver can follow its
normal assumptions, but the results might be incorrect for certain printers.
*LandscapeOrientation should appear only in the PPD files of printers in which
5.16
Some devices support user-defined or custom page sizes by allowing the user
to supply the page dimensions and other characteristics, rather than selecting
from a list of pre-defined page sizes. The keywords in this section support
that capability.
Custom page sizes are handled differently depending on whether the media is
roll-fed or cut-sheet. Some devices accept both roll-fed and cut-sheet media.
With roll-fed media, such as a roll of film or paper, the media is larger than
the page size requested by the user. The requested page size is positioned
somewhere on the larger physical media, and the imageable area may be
assumed to be identical to the requested page size, which means the entire
page area is imageable.
When using cut-sheet media, the user is expected to supply an individual
sheet of the requested physical size, often in a tray that adjusts to different
sizes. The page size requested by the user is identical to the physical page
size. However, due to media handling hardware requirements, the imageable
area may be smaller than the requested page size. The unimageable margin
area required by the hardware is described by the keyword *HWMargins.
106
(9 Feb 1996)
The location and orientation of the page image on the media and of the initial
PostScript coordinate system depends on the combination of the custom page
size parameters. Custom page size and orientation parameters are specified
relative to the media feed direction. For roll-fed media, the media feed direction is parallel to the length of the roll of media, as shown in Figure 1:
Figure 1 Media feed direction on roll-fed media
media feed direction
roll-fed media
(capstan imagesetter)
roll-fed media
(drum imagesetter)
For cut-sheet media, media feed direction is the direction in which media is
fed into the device, as shown in Figure 2.
Figure 2 Media feed direction on cut-sheet media
media feed direction
long-edge feed
short-edge feed
5 Keywords
107
108
(9 Feb 1996)
Figure 3 shows the interaction between Width, Height and Orientation. Although
this figure depicts roll-fed media, the same principles apply to cut-sheet
media. Note that Width and Height are always defined with respect to the media
feed direction. For a given Width and Height, two values of Orientation will produce a landscape (y < x) coordinate system and two values of Orientation will
produce a portrait (x < y) coordinate system.
Figure 3 Interaction of Width, Height, and Orientation
Width > Height,
Orientation:
+y
+x
0,0
0,0
+x
+y
Width
media feed
direction
+y +x
0,0
0,0
+y
+x
Height
+y
+x
+x
+y
0,0
+y +x
0,0
+x
*CustomPageSize
0,0
0,0
+y
True: invocation
This InvocationValue provides the code to set up a custom page size. The
print manager is responsible for obtaining five parameters from the user and
placing them on the operand stack in the correct order before executing the
invocation code. The parameters are Width, Height, WidthOffset, HeightOffset, and
Orientation, as described earlier. The order in which these parameters must be
placed on the stack is described under *ParamCustomPageSize.
Because *CustomPageSize emits code, there must be a *NonUIOrderDependency
statement for *CustomPageSize. There may be *NonUIConstraints between
*CustomPageSize and *InputSlot or other features.
The *CustomPageSize code can be quite complex. See section 6.3 for several
examples of complete custom page size entries on various types of devices.
Note
On a roll-fed device, the actual orientation of a page might not match the
request, due to device configuration. For example, an imagesetter manufacturer might configure a product to conserve media by rotating a page automatically so that it feeds long-edge first, if the requested page size will fit that
way. The *CustomPageSize invocation code cannot be expected to override such
behavior.
5 Keywords
109
Note
*ParamCustomPageSize
This provides the allowable types and ranges for each of the custom page size
parameters (paramOption) required by the invocation code of the *CustomPageSize statement. There must be one *ParamCustomPageSize statement for each of
the custom page parameters: Width, Height, WidthOffset, HeightOffset, and Orientation. Like any option keyword, these options can have translation strings,
allowing a print manager a more meaningful string to display to the user.
For example:
*ParamCustomPageSize
*ParamCustomPageSize
*ParamCustomPageSize
*ParamCustomPageSize
*ParamCustomPageSize
110
(9 Feb 1996)
If the device does not support offsetting the image on the media, the min and
max range values for WidthOffset or HeightOffset (or both, if offsetting is not supported in either direction) will both be 0 (zero). The print manager can use
this information to limit or disable user selection of the offsetting feature.
*MaxMediaWidth:
"real"
*MaxMediaHeight:
"real"
*?CurrentMediaWidth:
query
*?CurrentMediaHeight:
"query"
The absolute maximum width and height of media supported by the device
can be obtained from the values of *MaxMediaWidth and *MaxMediaHeight respectively. However, some devices support different sizes of media cassettes, so
the current maximum width or height might be less than the absolute maximum width or height respectively. *?CurrentMediaWidth returns a real number
specifying the maximum width, in PostScript default units, of the currently
installed media. *?CurrentMediaHeight returns a real number specifying the maximum height, in PostScript default units, of the currently installed media.
If these queries are available, a print manager can use them to replace the
values of *MaxMediaWidth and *MaxMediaHeight in the print managers internal
data structures with the value returned by the query. The print manager can
then proceed with range-checking as described under *MaxMediaWidth and
*MaxMediaHeight.
*CenterRegistered:
True | False
This keyword provides a StringValue that tells whether the device registers
the film or paper stock from the center or from the edge of the scan. If a
device uses center-registering, it is up to the user or the application to provide
the correct value for WidthOffset, to move the image to the beginning edge of
the stock. For example, on a center-registered device, if the user installs 10-
5 Keywords
111
inch wide stock on a 12-inch wide transport mechanism, either the user or the
application must provide a 1-inch WidthOffset to get the image to start at the
edge of the stock. On a device that does not use center-registering, this additional calculation is unnecessary.
*LeadingEdge
*DefaultLeadingEdge:
edgeOption:
edgeOption
*LeadingEdge allows the user to tell the print manager how the current input
slot has been configured to feed the page. This is both an assertion of how an
input slot is set up (for cut-sheet media) and a partial request for page image
orientation (for roll-fed media). See Responsibilities of a Print Manager
Regarding Custom Page Sizes at the end of this section for a description of
how the print manager can use this information to determine the orientation
and imageable area of the page. *LeadingEdge should be displayed as a PickOne
menu and should follow the rules for PickOne keywords, although it is not surrounded by *OpenUI/*CloseUI (see the description of *OpenUI/*CloseUI for information on PickOne). The value of *DefaultLeadingEdge provides a default state for the
print manager to display.
The options for edgeOption are:
ShortThe currently selected input slot expects the page to be fed shortedge first, or the user would like the page image printed short-edge first on
roll-fed media.
LongThe currently selected input slot expects the page to be fed longedge first, or the user would like the page image printed long-edge first on
roll-fed media. On roll-fed media, this is often also called transverse or
media saving.
PreferLongThe currently selected input slot has been configured to rotate
the page image to correspond to long-edge feed if the page will fit that
way. That is, if Width is less than Height (which would normally produce a
short-edge feed), and if Height is less than or equal to *MaxMediaWidth, the
device will rotate the page image to be long-edge feed. If Width is less than
Height and Height is greater than the value of *MaxMediaWidth, the page will
remain short-edge feed.
ForcedThe device performs no page image rotation. The user can request
a custom page size whose Width and Height define it as short-edge feed, and
if the device is configured for long-edge feed, the short-edge feed image
will be printed on the long-edge feed page, so clipping will probably
occur. Likewise, a long-edge feed image can be printed on a short-edge
feed page, with clipping equally likely to occur.
112
(9 Feb 1996)
Note that *LeadingEdge does not control the device in any direct way; it is an
assertion from the user to the print manager about how the device has been
configured, and it aids the print manager in determining the value of the
Orientation parameter. This keyword is in the form of an InvocationValue for
convenience, but the InvocationValue quotes will be empty. This keyword
will not be surrounded by *OpenUI/*CloseUI because it requires extra action on
the part of a print manager and is therefore not suitable for blind parsing. A
*NonUIOrderDependency statement is not necessary, as no code will be downloaded from this keyword.
Note
To print manager authors: Some print managers provide leading-edge control in the form of a two-state checkbox labeled Transverse. In that case, an
empty box (Transverse Off) should cause *LeadingEdge to be set to Short, and a
checked box (Transverse On) should cause *LeadingEdge to be set to Long.
Note
To builders of PPD files: See section 6.3 for examples of how to determine
which *LeadingEdge options are supported on a device and how to write
*NonUIConstraints entries for *LeadingEdge. Be careful, when writing the
*NonUIConstraints entries, to not exclude all options at once. At any given time,
at least one option for *LeadingEdge must be available to the user.
Cut-Sheet Keywords
The following keywords apply only to devices that can accept cut-sheet pages
or can treat roll-fed pages as if they were individual sheets, imaging within an
area smaller than the requested page size.
*HWMargins:
This keyword describes how much space around the outer edge of the page
cannot be imaged because of hardware restrictions. A print manager can use
this information to calculate the imageable area and tell a user when the
entire requested custom page size cannot be printed upon, or to show the user
5 Keywords
113
which part of the page can be imaged. For non-custom page sizes, the keyword *ImageableArea provides the same information (in the form of imageable
area, rather than non-imageable area) for each supported page size. See
Responsibilities of a Print Manager Regarding Custom Page Sizes at the end
of this section for a description of how the print manager can use *HWMargins.
The StringValue of this keyword is composed of multiple components, separated by white space. The components are real numbers of PostScript default
units, and are defined in default user space as follows:
top = distance, in PostScript default units, from the top edge of the page to
the nearest beginning of imageable area. The top edge is the edge of the
page that enters the printer first (the leading edge in the direction of media
feed).
right, left, and bottom are similarly defined, as shown in Figure 4. This is a top
view; you are looking down at the paper going into the device.
Figure 4 Margins of *HWMargins
device
media feed
direction
right
right
bottom
top
bottom
top
left
left
short-edge feed
long-edge feed
For example, a printer might have an adjustable tray that accepts several sizes
of paper, but the printer always needs 1 inch along the sides and 1/2 inch at
the top and bottom to handle paper of any size. The *HWMargins statement to
describe this would be
*HWMargins: 72 36 72 36
Any or all of the values may be 0 (zero). If the margin requirements of the
printer vary with the paper size (for example, if the printer needs a 1 inch
margin to handle some page sizes, and a 2 inch margin to handle other page
sizes), the values of *HWMargins will reflect the largest margin required by the
printer (in this case, the 2 inch margin). For some page sizes, this might pro-
114
(9 Feb 1996)
vide a smaller imageable area than is actually achievable by the printer, but at
least it guarantees that marks made within the indicated imageable area will
be visible on the page.
This keyword will be present only if the device supports custom page sizes
and has hardware-imposed margins or can be configured to behave as though
it has hardware-imposed margins, imaging in an area that is smaller than the
requested page size.
Note
To builders of PPD files: Typically, PPD files for devices that accept only cutsheet media will have *HWMargins. Typically, PPD files for devices that accept
only roll-fed media will not have *HWMargins. Devices that accept only roll-fed
media are usually able to image over the entire requested page area; any
restrictions on page size due to hardware control mechanisms are described
by *MaxMediaWidth and *MaxMediaHeight. However, if the device supports both
roll-fed media and cut-sheet media, or if the device supports only roll-fed
media but can be configured to image within a smaller area as if the pages
were individual sheets, *HWMargins will be needed in the PPD file. See the
description of *UseHWMargins in this section.
Note
Because of varying margin widths, the interaction of custom page sizes with
duplexing (or other operations that may shift the image on the page) on cutsheet media is unpredictable.
*UseHWMargins
*DefaultUseHWMargins:
True | False:
True | False
5 Keywords
115
116
Note
To print manager authors: If *HWMargins is missing from the PPD file, assume
that all four values are zero. If *HWMargins is present and *UseHWMargins is
missing, assume that *HWMargins should always be used.
Note
(9 Feb 1996)
If *UseHWMargins is present, it should be offered as a two-state menu or checkbox in the custom page size user interface. *LeadingEdge, if present, should be
offered as a PickOne type of menu. Throughout the user selection process, the
print manager must consult any *NonUIConstraints statements for *UseHWMargins,
*CustomPageSize, and *LeadingEdge.
If *UseHWMargins is True, the print manager should warn the user that the device
may require setup at the devices front panel. If *UseHWMargins is not present
and *LeadingEdge is changed by the user from its default state, the print manager should warn the user that the device may require adjustment of the input
trays.
When obtaining the values for Width, Height, WidthOffset, HeightOffset, and
Orientation from the user, the print manager must
convert the value to the appropriate units listed under *ParamCustomPageSize
for that parameter, if necessary. For example, Width and Height may be
obtained from the user in inches or millimeters and must be converted to
points before any further calculations occur.
ensure that each value falls within the appropriate range listed under
*ParamCustomPageSize for that parameter. If the range is limited to a single
choice (for example, the range for Orientation may be 0..0), the print manager might wish to prevent the user from typing values in that field in the
user interface.
if *CenterRegistered is True, the print manager should warn the user to provide the correct value for WidthOffset if the installed media is narrower than
the transport mechanism.
ensure that the sum of Width plus WidthOffset does not exceed the value of
*MaxMediaWidth. Likewise, it must ensure that the sum of Height plus
HeightOffset does not exceed the value of *MaxMediaHeight.
5 Keywords
117
sents the dimensions of the page to the user, the print manager may have to
perform some manipulation on the dimensions to produce the correct Width
and Height before placing them on the operand stack.
If *LeadingEdge is PreferLong: If Width Height, or if Width < Height and Height
*MaxMediaWidth, the print manager should behave as if *LeadingEdge is Long
when consulting Table 2. If Width < Height and Height >*MaxMediaWidth, the
print manager should behave as if *LeadingEdge is Short when consulting
Table 2.
If *LeadingEdge is Forced, the print manager must accept the values of Width
and Height as provided by the user, and set *LeadingEdge accordingly for its
internal use. If Width < Height, *LeadingEdge should be Short. If Width Height,
*LeadingEdge should be Long. The print manager may also wish to warn the
user that if the device is not set up accordingly, the choice of Forced may
result in the clipping and apparent rotation of the image.
If *LeadingEdge is Unknown, see the note after Table 3.
Unless the print manager lets the user enter Orientation directly, the print
manager must deduce the value of Orientation from a combination of user
requests, as shown in Table 2.
Table 2 Determining the value of Orientation
User chooses:
Dimensions
Portrait (x < y)
Landscape (y < x)
*LeadingEdge: Long
Orientation = 0 or 2
Orientation = 1 or 3
*LeadingEdge: Short
Orientation = 1 or 3
Orientation = 0 or 2
Most print managers restrict the choices for Orientation to 0 and 1, and must
choose accordingly from Table 2. To offer the user a choice of 2 or 3 for
Orientation, the print manager must offer a user interface that allows the user
to choose all four orientations pictorially or by entering the value directly.
Once the value of Orientation has been determined, the print manager can
decide whether or not it is necessary to calculate and display the imageable
area, using the following algorithms:
If *HWMargins is not present or if *UseHWMargins is False, the page will be
imaged over its entire imageable area, so no imageable area calculations
are necessary. The print manager may skip to the last step in this section.
If *HWMargins is present and *UseHWMargins is not present or is True, and all
*NonUIConstraints conflicts have been resolved, then the print manager can
calculate the imageable area of the custom page size and show a pictorial
to the user. Using Orientation as a key, the print manager can use Table 3 to
118
(9 Feb 1996)
calculate the imageable area. The imageable area is expressed as the x and
y coordinates of the lower left and upper right corners of the imageable
area. These coordinates are referred to as llx, lly, urx, and ur y, respectively. top,
bottom, left, and right are defined in the description of *HWMargins.
Table 3 Using Orientation and *HWMargins to determine imageable area
Orientation
Note
llx
lly
urx
ury
top
left
left
bottom
bottom
right
right
top
Previous versions of this specification, which did not use Orientation to determine the correspondence of image edge to page edge, recommended using the
simpler but less accurate method of subtracting the largest of the four
*HWMargins values from each edge of the page. This method may produce a
much smaller imageable area than the device is capable of handling, but it
does guarantee that all marks made in the calculated imageable area will be
visible. For maximum user satisfaction, print managers should be written to
use the newer, more accurate method, using Orientation as a key. However, if
*LeadingEdge is Unknown, the print manager cannot calculate Orientation and
must resort to a fallback position such as described above.
Finally, the print manager must ensure that the parameters are placed on the
operand stack in the proper order (documented by *ParamCustomPageSize) and
followed by the invocation code from *CustomPageSize.
5.17
The keywords in this section provide handling of media other than media
selection, such as output attributes.
*OutputBin
*DefaultOutputBin:
*?OutputBin:
binOption: invocation
U
UII
binOption | Unknown
query
string denoting the current output path. If the device does not provide software-selectable output paths, these keywords will be omitted.
5 Keywords
119
*OutputOrder
*DefaultOutputOrder:
*?OutputOrder:
To builders of PPD files: Although older PPD files (and the tools that built
them) often included *DefaultOutputBin, it provides no useful information to a
print manager unless the complete *OutputBin entry is also present. If the
output bins are not software-selectable, omit these keywords.
orderOption: invocation
U
UII
orderOption | Unknown
query
order for the duration of the current job. On many devices, the output order is
tied to the selection of the output bin. On some devices, invoking a new page
stacking order will cause a new output bin to be selected. On other devices, a
new output bin must be explicitly selected. *DefaultOutputOrder indicates the
default page stacking order of the default output bin. *?OutputOrder returns a
string denoting the current page stacking order of the current output bin.
The currently registered values for orderOption are:
NormalThis keyword indicates that if the pages are transmitted to the
device in 1-n order, they will be in 1-n order when they are picked up from
the output tray. This usually, but not always, means that the output pages
are stacked face down in the output tray.
ReverseThis keyword indicates that if the pages are transmitted to the
device in 1-n order, they will be in n-1 order when they are picked up from
the output tray (the last page will be on the top of the stack). This usually,
but not always, means that the output pages are stacked face up in the
output tray.
Note
120
(9 Feb 1996)
*PageStackOrder
*TraySwitch
*DefaultTraySwitch:
*?TraySwitch:
U
UII
query
*Signature
*DefaultSignature:
*?Signature:
signatureOption: invocation
U
UII
signatureOption | Unknown
query
*Signature provides the InvocationValue to invoke signature options. Signaturing is the automatic ordering of virtual pages on physical pages, so that the
output, when properly folded and collated, will have all the virtual pages in
the proper order. *DefaultSignature denotes the default state of the automatic signature feature. *?Signature returns a string denoting the current state of the
automatic signature feature.
One of the signatureOptions must be None or False, to turn off the automatic signature feature. Other option keywords might include the number of virtual
images per physical page. The currently registered values for signatureOption
are:
TrueTurn on the signature option.
FalseTurn off the signature option.
5 Keywords
121
*Duplex
*DefaultDuplex:
*?Duplex:
duplexOption: invocation
U
UII
duplexOption | Unknown
query
*Duplex provides the InvocationValue to control the duplex (two-sided printing) feature. *DefaultDuplex denotes the default state of the duplex feature.
*?Duplex returns a string denoting the current state of the duplexing mechanism.
The currently registered values for duplexOption are listed below. One of the
options must be None or False, for no duplexing (that is, produce simplex or
one-sided printing). Tumbling is defined in section 4.11 of the PostScript
Language Reference Manual, Second Edition. Briefly, to print a book, where
the binding is along the left edge, the user selects NoTumble. To print a calendar, bound along the top edge so that successive pages are flipped upward,
the user selects Tumble. Tumble is also referred to as HeadToToe.
DuplexTumblePrint on both sides of the paper and tumble the images while
printing.
DuplexNoTumblePrint on both sides of the paper but do not tumble the
images.
SimplexTumblePrint on only one side of the paper, but tumble the images
while printing.
NonePrint the image on one side of the paper and do not tumble successive images (this is normal one-sided printing, equivalent to
SimplexNoTumble).
*OutputMode
*DefaultOutputMode:
*?OutputMode:
modeOption: invocation
U
UII
modeOption | Unknown
query
122
(9 Feb 1996)
5.18
Finishing Features
*Collate
*DefaultCollate:
*?Collate:
collateOption: invocation
U
UII
collateOption | Unknown
query
as follows: for three copies of a three-page document, collated pages are produced in the order 1-2-3-1-2-3-1-2-3, while uncollated pages are produced in
the order 1-1-1-2-2-2-3-3-3. One of the options must be None or False, to turn
off collating.
The currently registered values for collateOption are
TrueTurn on collation.
FalseTurn off collation.
*DefaultCollate denotes the default state of the collator mechanism. *?Collate
*FoldType
*DefaultFoldType:
*?FoldType:
foldOption: invocation
U
UII
foldOption | Unknown
query
Saddle
Letter
DoubleGate
XFold
LeftGate
None
5 Keywords
123
One of the options must be None or False, to turn off folding. Builders of PPD
files should include the following *UIConstraints statements to disable *FoldType
unless *FoldWhen has been invoked with a value other than None:
*UIConstraints: *FoldWhen None *FoldType
*UIConstraints: *FoldType None *FoldWhen
*FoldWhen
*DefaultFoldWhen:
*?FoldWhen:
foldOption: invocation
U
UII
foldOption | Unknown
query
124
(9 Feb 1996)
*Sorter
*DefaultSorter:
*?Sorter:
sortOption: invocation
U
UII
sortOption | Unknown
query
*StapleLocation
*DefaultStapleLocation:
*?StapleLocation:
stapleOption: invocation
U
UII
stapleOption | Unknown
query
5 Keywords
125
One of the options must be None or False, to turn off stapling. Builders of PPD
files should include the following *UIConstraints statements to disable
*StapleLocation unless *StapleWhen has been invoked with a value other than
None:
*UIConstraints: *StapleWhen None *StapleLocation
*UIConstraints: *StapleLocation None *StapleWhen
*StapleX
*DefaultStapleX:
*?StapleX:
stapleOption: invocation
U
UII
stapleOption | Unknown
query
user space) of where the staple is placed on the pagefor devices where the
location is expressed as two parameters, x and y. This keyword must appear in
PPD files in which *StapleY appears. A PPD file will contain either
*StapleLocation, or *StapleX and *StapleY, but not both.
These stapleOptions are used with the *StapleX keyword to determine the location of staples in relation to the x axis when the page is in portrait orientation:
LeftThe staple is placed along the left side of the page. Exactly where it is
placed in relation to the left edge is device-dependent.
RightThe staple is placed along the right side of the page. Exactly where
it is placed in relation to the right edge is device-dependent.
SaddleThe staple is placed halfway along the x axis of the page. This is
commonly used when the page is to be stapled along the center and then
folded in half along the staple line to form a booklet.
NoneNo stapling.
One of the options must be None or False, to turn off stapling. Builders of PPD
files should include the following *UIConstraints statements to disable *StapleX
unless *StapleWhen has been invoked with a value other than None:
*UIConstraints: *StapleWhen None *StapleX
*UIConstraints: *StapleX None *StapleWhen
126
(9 Feb 1996)
*StapleY
*DefaultStapleY:
*?StapleY:
stapleOption: invocation
U
UII
stapleOption | Unknown
query
user space) of where the staple is placed on the pagefor devices where the
location is expressed as two parameters, x and y. This keyword must appear in
PPD files in which *StapleX appears. A PPD file will contain either
*StapleLocation or *StapleX and *StapleY but not both.
These stapleOptions are used with the *StapleY keyword to determine the location of staples in relation to the y axis with the page in portrait orientation:
TopThe staple is placed at the top of the page. Exactly where it is placed
in relation to the top edge is device-dependent
OneThirdThe staple is placed 1/3 of the way down the page.
MiddleThe staple is placed halfway down the page.
TwoThirdsThe staple is placed 2/3 of the way down the page.
BottomThe staple is placed at the bottom of the page. Exactly where it is
placed in relation to the bottom edge is device-dependent
NoneNo stapling.
One of the options must be None or False, to turn off stapling. Builders of PPD
files should include the following *UIConstraints statements to disable *StapleY
unless *StapleWhen has been invoked with a value other than None:
*UIConstraints: *StapleWhen None *StapleY
*UIConstraints: *StapleY None *StapleWhen
5 Keywords
127
*StapleWhen
*DefaultStapleWhen:
*?StapleWhen:
stapleOption: invocation
U
UII
stapleOption | Unknown
query
These stapleOptions are used with the *StapleWhen keyword to determine when
the document should be stapled:
NoneDo not staple.
DeviceDeactivationStaple immediately after the device has been deactivated.
EndOfJobStaple when the last page has joined the other pages in the job,
so the entire job can be stapled together. The notion of job is explained
in section 3.7.7 of the PostScript Language Reference Manual, Second
Edition.
EndOfSetStaple when the last page has joined the other pages in the set, so
the entire set can be stapled together. The definition of set depends on
whether or not the document is collated. For a definition of set, see
NumCopies and Collate in Table 4.11 of the PostScript Language Reference
Manual, Second Edition.
EndOfPageStaple after each showpage or copypage.
*DefaultStapleWhen denotes the default time for stapling. *?StapleWhen returns a
string that denotes when stapling will occur under the current setting.
*StapleOrientation
*DefaultStapleOrientation:
*?StapleOrientation:
orientationOption: invocation
U
UII
orientationOption | Unknown
query
128
(9 Feb 1996)
45The staple is rotated 45 degrees clockwise from the x axis of the page.
90The staple is rotated 90 degrees clockwise from the x axis of the page.
That is, the staple is vertical, or parallel to the y axis of the page.
135The staple is rotated 135 degrees clockwise from the x axis of the
page.
NoneNo specific staple orientation requested (empty code).
One of the options must be None or False. Builders of PPD files should include
the following *UIConstraints statements to disable *StapleOrientation unless
*StapleWhen has been invoked with a value other than None:
*UIConstraints: *StapleWhen None *StapleOrientation
*UIConstraints: *StapleOrientation *StapleWhen None
*BindEdge
*DefaultBindEdge:
*?BindEdge:
bindOption: invocation
U
UII
bindOption | Unknown
query
string denoting which edge will be bound under the current setting.
These bindOptions are used with the *BindEdge keyword to determine the location of binding relative to the page in default user space (portrait orientation):
LeftThe binding is placed along the left side of the page.
RightThe binding is placed along the right side of the page.
BottomThe binding is placed along the bottom of the page.
TopThe binding is placed along the top of the page.
NoneNo binding.
One of the options must be None or False, to turn off binding. Builders of PPD
files should include the following *UIConstraints statements to disable *BindEdge
unless *BindWhen has been invoked with a value other than None:
*UIConstraints: *BindWhen None *BindEdge
*UIConstraints: *BindEdge None *BindWhen
5 Keywords
129
*BindType
*DefaultBindType:
*?BindType:
bindtypeOption: invocation
U
UII
bindtypeOption | Unknown
query
indicating which type of binding will occur given the current setting.
bindtypeOption is a product-dependent string describing the type of binding
available (for example, Spiral). One of the options must be None or False, to disable binding. Builders of PPD files should write *UIConstraints entries to disable *BindType when *BindWhen is None; see *BindEdge for an example.
*BindColor
*DefaultBindColor:
*?BindColor:
colorOption: invocation
U
UII
colorOption | Unknown
query
indicating which binding color will be used under the current setting. The
valid values for colorOption are product-dependent strings describing the color
of the binding, such as Blue or Red. One of the options must be None or False.
Builders of PPD files should write *UIConstraints entries to disable *BindColor
when *BindWhen is None; see *BindEdge for an example.
*BindWhen
*DefaultBindWhen:
*?BindWhen:
bindOption: invocation
U
UII
bindOption | Unknown
query
current setting.
These bindOptions are used with the *BindWhen keyword to determine when the
document should be bound:
NoneDo not bind.
DeviceDeactivationBind immediately after the device has been deactivated.
130
(9 Feb 1996)
EndOfJobBind when the last page has joined the other pages in the job, so
the entire job can be bound together. The notion of job is explained in
section 3.7.7 of the PostScript Language Reference Manual, Second Edition.
EndOfSetBind when the last page has joined the other pages in the set, so
the whole set can be bound together. The definition of set depends on
whether or not the document is collated. For a definition of set, see
NumCopies and Collate in Table 4.11 of the PostScript Language Reference
Manual, Second Edition.
One of the options must be None or False to turn off binding. See the description of *BindEdge for an example of *UIConstraints that should be written
between *BindWhen and *BindColor, *BindType, and *BindEdge.
*Booklet
*DefaultBooklet:
*?Booklet:
bookletOption: invocation
U
UII
bookletOption | Unknown
query
5 Keywords
131
*Slipsheet
*DefaultSlipsheet:
*?Slipsheet:
slipsheetOption: invocation
U
UII
slipsheetOption | Unknown
query
*InsertSheet
*DefaultInsertSheet:
*?InsertSheet:
query
will be drawn from the regular input tray. For example, a printer might allow
the insertion of a photograph between specific pages of the document after
the pages have passed through the heated elements in the printer. To accom-
132
(9 Feb 1996)
plish this, a print manager would emit the code for a True value at the beginning of the specific page, emit the showpage operator to insert the special
sheet, and then emit the code for the False value of *InsertSheet.
*DefaultInsertSheet denotes the default state of *InsertSheet. *?InsertSheet returns a
string denoting the current state of *InsertSheet.
Note
*Jog
*DefaultJog:
*?Jog:
To builders of PPD files: This feature was marked with the UI symbol in
previous versions of this specification. Upon further study, it was found that
this keyword should not be surrounded by *OpenUI/*CloseUI because the print
manager must do more than blindly post the feature and execute the code; it
must provide a method for the user to specify where the page should be
inserted and then perform the procedures described above.
jogOption: invocation
U
UII
jogOption | Unknown
query
invoked, the next job or set is offset to the left or right from the previous job
or set in the output bin. Jogging is also known as offset stacking. One of the
options must be None or False to turn off jogging.
The currently registered values for jogOption are:
NoneTurn off jogging.
DeviceDeactivation Jog at device deactivation.
EndOfJob Jog at the end of the current job.
EndOfSet Jog at the end of the current set.
*DefaultJog denotes the default state of jogging. *?Jog returns a string denoting
the current state of jogging.
5.19
Imagesetter Features
This section contains features that are usually found only on imagesetters
(also referred to as typesetters and filmsetters). These features are implemented by device-dependent means, but a uniform interface to them is provided by the PostScript interpreter. Each of these features, with the exception
of *ReferencePunch, is documented in section 4.11 of the PostScript Language
Reference Manual, Second Edition.
5 Keywords
133
*MirrorPrint
*DefaultMirrorPrint:
*?MirrorPrint:
U
UII
query
*NegativePrint
*DefaultNegativePrint:
*?NegativePrint:
U
UII
query
*AdvanceMedia
*DefaultAdvanceMedia:
*?AdvanceMedia:
advanceOption: invocation
U
UII
advanceOption | Unknown
query
134
(9 Feb 1996)
*CutMedia
*DefaultCutMedia:
*?CutMedia:
cutOption: invocation
U
UII
cutOption | Unknown
query
*CutMedia provides the InvocationValue to tell the device when to cut roll-fed
media. *DefaultCutMedia denotes the default state of *CutMedia. *?CutMedia returns
a string denoting the current state of *CutMedia.
*ReferencePunch
mediaOption: x y
Printing plates are typically punched along their leading edge to facilitate
mounting on printing presses. Some devices provide an equivalent punch
system for film so that the film may be accurately contacted to a printing
plate. This keyword provides the location of the reference punch (the center
point of the center hole on the punch rack) so that an application may position the image on the film relative to the punch.
The parameter mediaOption designates the page size. It must be one of the
option keywords listed under *PageSize and *PageRegion in the PPD file. There
must be one *ReferencePunch statement for every page size that can be
punched.
The parameters x and y provide the coordinates, in default user space, of the
reference punch. For example, if the punch rack was 1/8 inch ahead of the
page image along the media feed direction, and the reference punch was centered along the page in the direction perpendicular to media feed direction,
the PPD file would contain the following statements for the page sizes Letter
and Letter.Transverse:
*ReferencePunch Letter: 792.125 306
*ReferencePunch Letter.Transverse: -0.125 396
5 Keywords
135
This example assumes that, on this device, Letter has a width of 612, a height
of 792, and an orientation of 1, and Letter.Transverse has a width of 792, a
height of 612, and an orientation of 0, where width, height, and orientation
are defined as in Figure 3 on page 109.
Note: There is currently no *ReferencePunch support for custom page sizes.
5.20
This section contains keywords that provide information about the fonts on
the device.
*FDirSize:
int
This provides the size, in bytes, of the font directory in the devices interpreter. This is only useful for Level 1 devices, which have a fixed-size font
directory. This keyword will not appear in the PPD file of a Level 2 device. If
a print manager is keeping track of how many fonts have been downloaded to
the device, this StringValue tells a print manager when the directory is getting
full, so the print manager can flush out old fonts to make room for new ones.
Without this information, a print manager may either flush too often or
encounter a dictfull error.
*FCacheSize
vmOption: int
This StringValue provides the size of the font cache, in bytes, for a given
level of memory installed in the device. vmOption must be a valid option listed
under *VMOption and *InstalledMemory. (See the description of those keywords
for details on vmOption.) If the device accepts installable memory modules,
there should be a *FCacheSize statement for each module size.
*Font
This keyword provides one line of information for each font that may be resident on the product. (To understand which fonts are listed, see Listing fonts at
the end of this keyword description.) The option fontname is the valid PostScript language name of the font, without the leading slash. The StringValue
has multiple components separated by white space.
Value of encoding
The encoding value has slightly varying meanings depending on the font type.
If the encoding cannot be determined, the value of encoding may be Unknown.
136
(9 Feb 1996)
For Roman (one byte per character) fonts, the encoding value indicates the
default encoding of each font. Fonts are usually re-encoded by applications or
print managers to provide other encodings; the charset value (described later)
for each font indicates which encodings are possible for that font.
The following are the currently defined encoding values for Roman fonts:
StandardThis font, by default, uses the Adobe StandardEncoding vector.
SpecialThis font has a nonstandard font-specific encoding (for example,
the font named Sonata, which is composed of musical symbols).
ISOLatin1This font, by default, uses the Adobe ISOLatin1Encoding vector.
ExpertThis font, by default, uses the Adobe Expert encoding vector.
ExpertSubsetThis font, by default, uses the Adobe ExpertSubset encoding
vector.
Older composite fonts use the following encoding values:
JISA Japanese font with JIS (Japan Industrial Standard) encoding. (This
is a two byte-per-character encoding.)
RKSJA Japanese font with RKSJ (Romaji-Kana-Shift-JIS) encoding.
(This is a mixed one and two byte-per-character encoding, common on
PCs, and often informally referred to as Shift JIS. In this specification,
Shift-JIS refers to the two byte-per-character encoding, which is a
proper subset of RKSJ.)
EUCA Japanese font with EUC (Extended UNIX Code) encoding. (This
is a two byte-per-character encoding.)
Shift-JISA Japanese font with Shift-JIS encoding. (This is a two byte-percharacter encoding. It is a proper subset of RKSJ. The Japanese PC encoding commonly referred to as Shift JIS, which includes one-byte Romaji
and Katakana codes, is referred to in this specification as RKSJ.)
5 Keywords
137
CID-keyed composite fonts use the encoding value to record the CMap component of the font. For details on CMaps in CID-keyed composite fonts, including the CMap names for Chinese and Korean fonts, see Technical Note
#5094, Adobe CJK Character Collections and CMaps for CID-Keyed Fonts,
available from the Adobe Developers Association. The following is a list of
the currently registered values for encoding for Japanese CID-keyed fonts:
78-H
78-EUC-H
90pv-RKSJ-H
Add-RKSJ-H
Ext-RKSJ-H
EUC-H
Hankaku
Katakana
NWP-H
78-V
78-EUC-V
90ms-RKSJ-H
Add-RKSJ-V
Ext-RKSJ-V
EUC-V
Hiragana
Roman
NWP-V
78-RKSJ-H
83pv-RKSJ-H
90ms-RKSJ-V
Add-H
Ext-H
RKSJ-H
H
WP-Symbol
78-RKSJ-V
Add-V
Ext-V
RKSJ-V
V
Note
The encodings named NWP-H and NWP-V are obsolete and may be removed
from a future version of this specification.
Note
To builders of PPD files: The currently registered values for encoding are primarily for the most common Japanese fonts. If a font has a CMap name that
is not listed here, the appropriate CMap name from Technical Note #5094
should be inserted in the encoding field. However, print managers, depending
on how they use the encoding field, might not recognize new encoding values
until they are listed in this specification and the print manager is updated.
Value of version
The value of version is the version number of the font; for most fonts, it is the
value of the key Version in the FontInfo dictionary that is a subdictionary of the
font dictionary. For CID-keyed composite fonts, it is the value of the key
CIDFontVersion in the dictionary for the CIDFont resource instance.
Value of charset
The charset value of the *Font keyword indicates which shape descriptions
(glyphs) are contained in the font and are available for re-encoding. If this
information cannot be determined, the value of charset may be Unknown.
Valid charset values for Western (Roman) fonts are:
StandardThis indicates a Roman font that contains the character set that
supports both the Standard and ISOLatin1 encodings. Most Roman fonts from
Adobe will have this value in the charset field of their *Font statements.
138
(9 Feb 1996)
Note
Adobe-Japan1-1
Adobe-Korea1-0
Adobe-CNS1-0
Adobe-Japan1-2
Adobe-Korea1-1
To builders of PPD files: If a font contains a registry, ordering, and supplement combination that does not appear on this list, you may create a charset
value composed of the registry, ordering, and supplement values from the
font, in that order, separated by hyphens. Some print managers might not recognize such newly-created charset values; depending on whether or not the
print manager uses the charset information, this might not matter.
5 Keywords
139
Value of status
The status field indicates whether or not the font can be removed without
causing the printer to cease its normal functioning.Valid values for the status
field are ROM and Disk. The distinction between ROM and Disk is that upon
powering up the device, a font from the ROM list will be inaccessible only if
there is a printer malfunction. A font from the Disk list, while usually available, could possibly be inaccessible without a printer malfunction.
Table 4 contains examples of font distribution methods and associated status
keywords. This table is not exhaustive as to the different methods of font distribution.
Table 4 Designation of fonts: ROM versus Disk
Font distribution
Erasable
Removable
Status
ROM-resident
No
No
ROM
No
No
ROM
No
No
ROM
Yes
No
Disk
No
Yes
Disk
Yes
No
Disk
Yes
Yes
Disk
While most devices include fonts in ROM, a device could ship with all fonts
having a status of Disk. For example, all of a devices fonts could be shipped on
an external CD-ROM.
Listing fonts
All valid font dictionaries found on the device will have *Font statements; the
list is not limited to Type 1 fonts. All fonts shipped with the product in its
minimal configuration are listed. These fonts may be in ROM or on a peripheral device such as a hard disk, as long as they are always shipped with the
product.
Note
140
To builders of PPD files: If additional fonts are available on a plug-in cartridge, hard disk, or similar peripheral device that does not ship with the
product in its minimal configuration, a separate PPD file should be created
to represent the primary device with the peripheral device attached. For
example, there might be a PPD file for Acme FunPrinter and a separate
PPD file for Acme FunPrinter with Display Font Cartridge. The second
PPD file would be a duplicate of the first PPD file, except that the second
PPD file would contain extra *Font statements to list the fonts available on the
(9 Feb 1996)
which would tell a print manager that the Palatino font is not available if the
*Option1 font cartridge is not installed on the device. The PPD file could contain *Font entries for fonts available on peripheral devices for this product,
along with the appropriate *NonUIConstraints statement that ties the presence of
the font to the presence of the peripheral device. If you are writing or upgrading an application that reads *Font statements, we recommend that you
include support for this future feature. That is, instead of assuming that all
fonts listed under *Font are always present on the device, applications should
be written to check for *NonUIConstraints on *Font and only register the font as
available if the appropriate peripheral device has been registered as
installed.
Fonts that are later downloaded to the device from the host via software are
usually monitored by system software (the print manager, a font downloading
utility, or any application) and are not covered by this specification.
*DefaultFont:
Error | fontname
This gives the name of the default font provided by findfont if the requested
font is not available. Note that in some devices this might not be well-defined
(especially where there might be a network font server, for instance), and in
these cases, this statement might not be present. For many devices this field
will contain the name Courier. If this value is Error, an execution error will
occur if the font is not found. Any other value implies that a font substitution
will take place (such as substituting Courier).
*?FontList:
query
5 Keywords
141
mally the way the PostScript language == operator will return a font name.
All white space characters should be ignored. The end of the font list is indicated by a trailing * sign on a line by itself (decimal 42).
The following is a look at two valid returns from the query:
/Optima/Optima-Bold/Optima-Oblique/Optima-BoldOblique/Courier/Symbol
*
and
/Courier
/Symbol
/Times-Roman
*
Note
*?FontQuery:
To builders of PPD files: This keyword can return a large amount of data. If
the host or communication channel cannot retrieve the data fast enough, the
devices output buffer may overflow, causing data to be lost before it can be
retrieved. If the device ships with a large number of fonts or will regularly be
attached to a mass storage device containing many fonts, the *?FontList code
should be tested over all available communication channels. If data is lost,
the*?FontList code should be altered to slow down the output. One method is to
output the font names in groups separated by small time delays.
query
142
(9 Feb 1996)
For example:
/Times-Roman:Yes
/Optima:Yes
/CircleFont:No
/Adobe-Garamond:No
*
Note
To print manager authors: The query provided by *?FontQuery is often preferable to the *?FontList query, since that query can return a very long list of fonts
in some devices, such as those with access to built-in hard disks or network
font servers.
Note
To builders of PPD files: Given a large list of font names to query, this keyword could return a large amount of data, although not typically as large as
*?FontList. If the host or communication channel cannot retrieve the data fast
enough, the devices output buffer may overflow, causing data to be lost
before it can be retrieved. If the device ships with a large number of fonts or
will regularly be attached to a mass storage device containing many fonts, the
*?FontQuery code should be tested with a large list of font names over all available communication channels. If data is lost, the*?FontQuery code should be
altered to slow down the output. One method is to output the responses in
smaller groups separated by small time delays.
5.21
Printer Messages
In an environment where the output device is connected to the host by a bidirectional channel, such as serial communication, the output device can
return various status messages to the host. A print manager can recognize
these messages and convert some of them to a more readable form before displaying them to the user. The messages are divided into categories and enumerated in the PPD file for recognition purposes.
*PrinterError:
text
Printer errors are reported automatically by the output device when something is wrong. The same printer errors can often be returned in a status message as a response to a request for status (see *Status). This provides a list of
QuotedValues that are possible Printer Error messages returned by the device
in the following form:
%%[PrinterError: cover open]%%
%%[PrinterError: paper exit misfeed]%%
5 Keywords
143
The PPD file statements for these error messages would be as follows:
*PrinterError: "cover open"
*PrinterError: "paper exit misfeed"
The brackets, percent signs, and the word PrinterError from the original
error message are not included in the PPD file.
If a translation string were included, the PPD file statement would look like
this:
*PrinterError: "cover open"/lucka <F6>ppen
The translation string translates the error message into Swedish; the hexadecimal substring F6 represents the 8-bit character Odieresissmall. See section 3.5 for details on translation string syntax.
*Status:
text
The statements in the PPD file will not have the brackets, the percent signs, or
the extraneous fields for jobname and source. The PPD file will contain only the
message field:
*Status:
*Status:
*Status:
*Status:
144
"warming up"
"busy"
"waiting"
"PrinterError: cover open"
(9 Feb 1996)
Note that the message portion of a status message can contain a printer error,
so the same list of printer errors that appears under *PrinterError may appear
under *Status.
*Source:
sourceOption
This lists the possible sources for print jobs, as QuotedValues. These correspond to the source: field in the status message (as shown under the *Status section). This effectively provides a list of the names of the communications
channels on the device, plus any other possible sources for jobs. The following are example statements for Level 1 devices:
*Source:
*Source:
*Source:
*Source:
"serial25"
"serial9"
"AppleTalk"
"Centronics"
"Serial"
"SerialB"
"LocalTalk"
"Parallel"
The status message in which the source is found can contain other fields (as
in the example under *Status), depending on the values of jobname in statusdict
and whether or not there is an active job (in which case the source is listed).
Just the strings for the source field are provided in this section.
*Message:
text
5 Keywords
145
Notice the \fontname\ notation in the last example, with the backslashes. The
exact text of this message depends on which font was requested by the user
program. This backslash notation is a PPD file syntax that indicates that any
arbitrary PostScript language name may be found at the beginning of that
message (substituted for \fontname\). A parser, parsing a PPD file, should parse
for the complete string \fontname\. Special significance should not be given to
the single character \, because a backslash can occur in other contexts.
5.22
Color separation option keywords (the notation colorsepkey in the keyword listings) are designed to reflect particular combinations of separation characteristics. For example, a given separation typically is designed for a particular
process color (for example, the cyan separation), at a certain halftone screen
frequency, for a particular resolution device. To this end, the color separation
146
(9 Feb 1996)
option keywords are complex and modular, but they can be made more
human-readable through use of the general translation string mechanism provided in the file format.
A colorsepkey consists of a name that can optionally have any number of qualifiers (sub-components), each separated by a dot (., decimal 46). The key is
typically a color name, and the qualifiers typically refer to a screen frequency, a resolution, and sometimes to vendor-specific or printer-specific
features that can affect the appearance of the color separation, such as a special screening method or a specific type of controller.
Two common qualifiers are defined in this spec: screen frequency, which
must end in the string lpi, and resolution, which must end in the string dpi.
These qualifiers occur in the following relationship:
colorname.frequency.resolution
Any number of other qualifiers can appear after the resolution qualifier and
will be separated from each other by a dot.
The idea is to be able to associate many different components of a color separation package by keyword. The keywords are arbitrary, but the structured
qualifiers make it possible for an application to separate the components, if
necessary, to allow a user to choose from several frequencies, optional resolutions, and so on. Otherwise, these keywords behave similarly to any other
option keywords in PPD files. For devices where the resolution cannot be
varied (most of them), the resolution qualifier will usually be omitted from
the colorsepkey keyword.
The following are several examples, to help illustrate the format more clearly:
*ColorSepScreenAngle ProcessCyan.60lpi.1270dpi: "37"
*ColorSepScreenAngle ProcessMagenta.60lpi.1270dpi: "45"
*ColorSepScreenAngle ProcessYellow.60lpi.1270dpi: "75"
*ColorSepScreenAngle ProcessBlack.60lpi.1270dpi: "0"
*ColorSepScreenFreq ProcessBlack.60lpi.1270dpi: "60"
*ColorSepScreenProc ProcessBlack.60lpi.1270dpi: "{ pop }"
*ColorSepTransfer ProcessBlack.60lpi.1270dpi: "{ 1 exch sub }"
*ColorSepScreenFreq ProcessCyan.90lpi.1270dpi: "90"
*ColorSepScreenFreq ProcessCyan.60lpi.600dpi: "60"
5 Keywords
147
*DefaultColorSep:
colorsepkey
This keyword provides the default color separation in the form of a colorsepkey
keyword. This is used in conjunction with the other keywords listed below.
*ColorSepScreenFreq
colorsepkey: real
This keyword provides the InvocationValue for the appropriate screen frequency for a color separation keyed to the given colorsepkey.
*ColorSepScreenAngle
colorsepkey: real
This statement gives the halftone screen angle InvocationValue for the given
color separation.
*ColorSepScreenProc
colorsepkey: {procedure}
This provides the halftone spot function InvocationValue for the specified
color separation.
*ColorSepTransfer
colorsepkey: {procedure}
*CustomCMYK
148
(9 Feb 1996)
*InkName:
inkname / alias
Alternatively, you can omit the *InkName entry and simply supply a translation
string for the option keyword of the *CustomCMYK entry. For example:
*CustomCMYK p305/Harvest Gold 305: "0 .01 .9 0.1"
*Separations
*DefaultSeparations:
*?Separations:
U
UII
query
5.23
The keywords in this section provide a way for parsers to skip large amounts
of data contained in a PPD file when the parsers are not interested in that particular type of data. This is accomplished by providing a symbolic reference
in place of a large body of PostScript language code.
Where an InvocationValue is normally permitted, it is legal to have a symbol
name instead. A symbol name must start with the character caret, ^ (decimal
94). This symbol name is associated with a PostScript language sequence
5 Keywords
149
(InvocationValue) that appears at some later place in the PPD file (or in an
attached local customization file). Since the InvocationValue might be large,
a length hint can be provided by *SymbolLength to allow parsers to skip the
large value quickly.
For example:
*OpenUI *MainFeature: PickOne
*MainFeature Option1: ^MySymbol
*MainFeature Option2: "..."
*CloseUI: *MainFeature
...
*SymbolLength ^MySymbol: bytecount EOLcount
*SymbolValue ^MySymbol: "
... bulky data here (e.g. color rendering dictionary)
"
*SymbolEnd: ^MySymbol
*SymbolLength
This keyword tells a parser how long the body of data is, so the parser knows
how many bytes to skip if it wants to skip this data. The option symbolName
must be the symbolName used in the associated *SymbolValue statement.
The StringValue components bytecount and EOLcount are unsigned integers,
separated by white space. Together they measure the length in bytes of the
data from the * byte of *SymbolValue to the * byte of *SymbolEnd. The first
value gives the number of bytes, excluding the bytes that comprise end-ofline sequences. The second value gives the number of end-of-line sequences.
The parser must determine the number of bytes in an end-of-line sequence in
the PPD file (usually 1 or 2).This number is usually a function of the operating system or platform on which the parser is operating, so it is usually
known to the parser. It can then compute the byte offset of the *SymbolEnd keyword in the file by the formula
ibEnd = ibValue + bytecount + (cbEOL*EOLcount)
150
(9 Feb 1996)
where
ibEnd
= byte offset of '*' in '*SymbolEnd'
ibValue = byte offset of '*' in '*SymbolValue'
cbEOL
= number of bytes per end-of-line sequence
and the values of bytecount and EOLcount are taken from the *SymbolLength keyword.
The information given by the *SymbolLength keyword is a hint only; parsers
must not rely on it being correct or even present. If it is not correct or present,
the parser must skip the value definition by scanning through the file until it
reaches the *SymbolEnd keyword with the appropriate symbolName.
*SymbolLength must occur in a PPD file immediately before *SymbolValue.
*SymbolValue
symbolName: invocation
*%File: C
...
*SymbolLength ^JogTrue: 2000 500
*SymbolValue ^JogTrue: "..."
*SymbolEnd: ^JogTrue
5 Keywords
151
*%File: E
*Jog True: ^JogTrue
...
The rules for legal symbolNames are the same as for legal option keywords. By
convention, Adobe-generated PPD files will construct symbol names by concatenating the main and option keywords together (omitting the asterisk from
the main keyword). For example:
*ColorRenderDict Saturated.Bond.Dot: ^ColorRenderDictSaturated.Bond.Dot
...
*SymbolValue ^ColorRenderDictSaturated.Bond.Dot: ...
*SymbolEnd:
symbolName
This keyword must appear on the next line following the closing double
quote of the symbol value. The StringValue value, symbolName, must be the
same as the symbolName used in the associated *SymbolValue statement.
152
(9 Feb 1996)
6.1
This PPD file describes a Level 2 color printer with one resolution, one regular input slot, one manual feed slot, two output bins, an optional envelope
feeder, and three supported page sizes. The printer can have a hard disk
attached to it. It supports duplexing, choosing the media by type, and HP
LaserJet emulation. It can also do color separations at the printer, when sent a
composite color file.
*PPD-Adobe: "4.3"
*FormatVersion: "4.3"
*FileVersion: "1.0"
*LanguageEncoding: ISOLatin1
*LanguageVersion: English
*Product: "(Acme Color Printer)"
*PSVersion: "(2017.0) 0"
*Manufacturer: Acme
*ModelName: "Acme Color Printer v.2017"
*ShortNickName: Acme Color Printer
*NickName: "Acme Color Printer v.2017"
*PCFileName: ACCOLOR1.PPD
*%=== Basic Capabilities ===============
*LanguageLevel: 2
*ColorDevice: True
*DefaultColorSpace: CMYK
*FreeVM: "8134935"
*FileSystem: True
*?FileSystem: "
save false
(%disk?%)
{ currentdevparams dup /Writeable known
{ /Writeable get {pop true} if } { pop } ifelse
} 10 string /IODevice resourceforall
{(True)}{(False)} ifelse = flush
restore"
*End
*Throughput: "1"
*Password: "0"
153
154
(9 Feb 1996)
155
*% These entries set up the frame buffer. Usually used with manual feed.
*OpenUI *PageRegion: PickOne
*OrderDependency: 30 AnySetup *PageRegion
*PageRegion Letter: "(<<) cvx exec /PageSize [612 792] /ImagingBBox null
(>>) cvx exec setpagedevice"
*End
*PageRegion Legal: "(<<) cvx exec /PageSize [612 1008] /ImagingBBox null
(>>) cvx exec setpagedevice"
*End
*PageRegion Env10: (<<) cvx exec /PageSize [297 684] /ImagingBBox null
(>>) cvx exec setpagedevice
*End
*DefaultPageRegion: Letter
*CloseUI: *PageRegion
*% The following entries provide information about specific paper keywords.
*DefaultImageableArea: Letter
*ImageableArea Letter: "13 12 596 774 "
*ImageableArea Legal: "15 13 597 991 "
*ImageableArea Env10: "15 13 280 670"
*?ImageableArea: " save /cvp { cvi (
print ( ) print } bind def
newpath clippath pathbbox
4 -2 roll exch 2 {ceiling cvp} repeat
exch 2 {floor cvp} repeat ( ) = flush
restore
"
*End
) cvs
156
(9 Feb 1996)
*?InputSlot: "
save
(<<) cvx exec
/1 (Envelope)
/0 (Upper)
(>>) cvx exec
currentpagedevice /InputAttributes get
dup /Priority known
{ /Priority get 0 get (
) cvs cvn get }
{
dup length 1 eq
{ {pop} forall (
) cvs cvn get }
{ pop pop (Unknown) } ifelse
} ifelse
= flush
restore
"
*End
*CloseUI: *InputSlot
*OpenUI *MediaType: PickOne
*OrderDependency: 20 AnySetup *MediaType
*DefaultMediaType: Paper
*MediaType Transparent: "(<<) cvx exec /MediaType Transparent (>>) cvx exec setpagedevice"
*MediaType Paper: "(<<) cvx exec /MediaType Paper (>>) cvx exec setpagedevice"
*?MediaType: " save
currentpagedevice /MediaType {get} stopped
{pop pop (Unknown)} {dup null eq {pop (Unknown)} if} ifelse = flush restore "
*End
*CloseUI: *MediaType
*OpenUI *Duplex: PickOne
*OrderDependency: 30 AnySetup *Duplex
*DefaultDuplex: None
*Duplex DuplexTumble: "(<<) cvx exec /Duplex true /Tumble true (>>) cvx exec setpagedevice"
*Duplex DuplexNoTumble: "(<<) cvx exec /Duplex true /Tumble false (>>) cvx exec setpagedevice
*Duplex None: "(<<) cvx exec /Duplex false /Tumble false (>>) cvx exec setpagedevice"
*?Duplex: "save currentpagedevice /Duplex get
{ currentpagedevice /Tumble get
{(DuplexTumble)}{(DuplexNoTumble)}ifelse
}
{ (None)}
ifelse = flush
restore
"
*End
*CloseUI: *Duplex
*% Font Information =====================
*DefaultFont: Courier
*Font AvantGarde-Book: Standard "(001.002)" Standard ROM
*Font AvantGarde-BookOblique: Standard "(001.002)" Standard ROM
*Font AvantGarde-Demi: Standard "(001.003)" Standard ROM
*Font AvantGarde-DemiOblique: Standard "(001.003)" Standard ROM
*Font Courier: Standard "(002.002)" Standard ROM
*Font Courier-Bold: Standard "(002.002)" Standard ROM
*Font Courier-BoldOblique: Standard "(002.002)" Standard ROM
157
*Font
*Font
*Font
*Font
*Font
*Font
*?FontQuery: "
save
{ count 1 gt
{ exch dup 127 string cvs (/) print print (:) print
/Font resourcestatus {pop pop (Yes)} {(No)} ifelse =
} { exit } ifelse
} bind loop
(*) = flush
restore"
*End
*?FontList: "
save (*) {cvn ==} 128 string /Font resourceforall
(*) = flush restore"
*End
*% Printer Messages (verbatim from printer):
*Message: "%%[ exitserver: permanent state may be changed ]%%"
*Message: "\FontName\ not found, using Courier"
*% Status (format: %%[ status: <one of these> ]%% )
*Status: "idle"
*Status: "busy"
*Status: "waiting"
*Status: "printing"
*Status: "initializing"
*Status: "PrinterError: "Optical System Error "
*Status: "PrinterError: " Cover Open "
*Status: "PrinterError: "Prnter Wrmng"/PrinterError: Printer Warming Up
*% Input
*Source:
*Source:
*Source:
*Source:
158
(9 Feb 1996)
ProcessBlack/Process Black
CustomColor/Custom Color
ProcessCyan/Process Cyan
ProcessMagenta/Process Magenta
ProcessYellow/Process Yellow
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*%
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenAngle
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
===============================
===============================
159
6.2
Level 2 Imagesetter
160
(9 Feb 1996)
161
162
(9 Feb 1996)
*% These provide the physical dimensions of the page (by option keyword)
*DefaultPaperDimension: Letter
*PaperDimension Letter: "612 792"
*PaperDimension Legal: "612 1008"
*PaperDimension Tabloid: "792 1224"
*% Only one input slot, but the entry is included to dictate the slot name
*% that appears in the user interface.
*OpenUI *InputSlot: PickOne
*OrderDependency: 30 AnySetup *InputSlot
*InputSlot Cassette:
*DefaultInputSlot: Cassette
*CloseUI: *InputSlot
*% === Imagesetter Information ===========================
*% Imagesetter features are grouped here.
*OpenGroup: Imagesetter
*OpenUI *MirrorPrint/Mirror Print: Boolean
*OrderDependency: 40 AnySetup *MirrorPrint
*MirrorPrint True: "(<<) cvx exec /MirrorPrint true (>>) cvx exec setpagedevice"
*MirrorPrint False: "(<<) cvx exec /MirrorPrint false (>>) cvx exec setpagedevice"
*DefaultMirrorPrint: False
*?MirrorPrint: " save currentpagedevice /MirrorPrint get
{(True)} {(False)} ifelse = flush restore"
*End
*CloseUI: *MirrorPrint
*OpenUI *NegativePrint/Negative Print: Boolean
*OrderDependency: 40 AnySetup *NegativePrint
*NegativePrint True: "(<<) cvx exec /NegativePrint true (>>) cvx exec setpagedevice"
*NegativePrint False: "(<<) cvx exec /NegativePrint false (>>) cvx exec setpagedevice"
*DefaultNegativePrint: False
*?NegativePrint: "save currentpagedevice /NegativePrint get
{(True)}{(False)}ifelse = flush restore"
*End
*CloseUI: *NegativePrint
*CloseGroup: Imagesetter
*% Font Information =====================
*% For example purposes, this device ships with several fonts built into
*% the ROM of the device, and Avant-Garde on a separate hard disk
*DefaultFont: Courier
*Font AvantGarde-Book: Standard "(001.002)" Standard Disk
*Font AvantGarde-BookOblique: Standard "(001.002)" Standard Disk
*Font AvantGarde-Demi: Standard "(001.003)" Standard Disk
*Font AvantGarde-DemiOblique: Standard "(001.003)" Standard Disk
*Font Courier: Standard "(002.002)" Standard ROM
*Font Courier-Bold: Standard "(002.002)" Standard ROM
*Font Courier-BoldOblique: Standard "(002.002)" Standard ROM
*Font Symbol: Special "(001.003)" Special ROM
*Font Times-Bold: Standard "(001.002)" Standard ROM
*Font Times-BoldItalic: Standard "(001.004)" Standard ROM
*Font Times-Italic: Standard "(001.002)" Standard ROM
*Font Times-Roman: Standard "(001.002)" Standard ROM
163
*?FontQuery: "
save
{ count 1 gt
{ exch dup 127 string cvs (/) print print (:) print
/Font resourcestatus {pop pop (Yes)} {(No)} ifelse =
} { exit } ifelse
} bind loop
(*) = flush
restore
"
*End
*?FontList: "
save (*) {cvn ==} 128 string /Font resourceforall
(*) = flush restore
"
*End
*% Printer Messages (verbatim from printer):
*Message: "%%[ exitserver: permanent state may be changed ]%%"
*Message: "\FontName\ not found, using Courier"
*% Status (format: %%[ status: <one of these> ]%% )
*Status: "idle"
*Status: "busy"
*Status: "waiting"
*Status: "printing"
*Status: "initializing"
*Status: "PrinterError: Cassette not loaded"
*Status: "PrinterError: Film Unit Error"
*% Input
*Source:
*Source:
*Source:
*Source:
ProcessBlack/Process Black
CustomColor/Custom Color
ProcessCyan/Process Cyan
ProcessMagenta/Process Magenta
ProcessYellow/Process Yellow
164
===============================
(9 Feb 1996)
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
*ColorSepScreenFreq
165
6.3
This section contains examples of custom page size entries for Level 1 and
Level 2 drum and capstan recorders (roll-fed devices) and for Level 2 devices
that accept both roll-fed and cut-sheet media. These examples are intended to
help builders of PPD files with the construction of custom page size entries.
They should be interpreted as guidelines, not requirements of this specification.
Because of the complexity of writing a custom page size entry, it is critical
that you thoroughly test your *CustomPageSize code with requests for different
page sizes, different offsets (if supported), and different orientations, preferably using several different print managers or applications. Such testing often
highlights problems with the custom page size code in the PPD file, with a
print managers handling of custom page sizes, or even with the devices
implementation of custom page sizes.
Minimums and maximums
When constructing your own custom page size entry, you would insert the
devices values for *MaxMediaWidth, *MaxMediaHeight, *HWMargins (if present), and
the minimum and maximum range values of the *ParamCustomPageSize entries.
On some devices, requesting a width or height of zero will cause an error.
Because of this, the values of the minimum Width and Height boundaries in the
*ParamCustomPageSize entries should be set to small positive numbers, such as
100 points.
*LeadingEdge
*LeadingEdge is needed by print managers to give the user a way to request
Transverse pages (on roll-fed media) or to tell the print manager how a cutsheet device is configured so that the imageable area of the custom page size
can be calculated correctly. It is important to include this keyword in the PPD
file if *CustomPageSize is present.
For *LeadingEdge, list only the options that are available on the device. Most
devices that accept only cut-sheet media will support either Short or Long, but
not both. However, some cut-sheet devices will support both Short and Long,
either in separate input trays or in an adjustable input tray. Most roll-fed
devices support both Short and Long, because the page image can be rotated on
the film or paper.
166
(9 Feb 1996)
The *LeadingEdge option Forced is very rare. Forced will usually be available
only on devices that accept cut-sheet media. If the device always rotates the
page image in device space so that the long axis of the page image is parallel
to the long axis of the physical page, then Forced is not available on the
device. To find out whether Forced is available, try to print a short-edge feed
image (Width < Height, Portrait orientation) on a long-edge feed page, or vice
versa. You must first set up the device correctly, in do what I say mode,
with the leading edge set up to be the opposite of what you will request from
the print manager. If you do this with a full-page image, and Forced is available, the image should appear to be rotated 90 degrees and clipped. If you are
unsure, do not include Forced as an option for *LeadingEdge in the PPD file.
Unknown is available for all devices, but it provides a print manager with no
167
recorder:
*CenterRegistered: False
*LeadingEdge Short:
*LeadingEdge Long:
*DefaultLeadingEdge: Long
*NonUIOrderDependency: 20 AnySetup *CustomPageSize
*ParamCustomPageSize Width: 1 points 1 1008
*ParamCustomPageSize Height: 2 points 1 3000
*ParamCustomPageSize WidthOffset/Margins: 3 points 0 1007
*ParamCustomPageSize HeightOffset: 4 points 0 0
*ParamCustomPageSize Orientation: 5 int 0 1
*CustomPageSize True: "exch pop
statusdict /setpageparams get exec"
*End
*MaxMediaWidth: "1008"
*?CurrentMediaWidth: "statusdict /mediawidth get exec = flush"
*MaxMediaHeight: "3000"
*?CurrentMediaHeight: "statusdict /medialength get exec = flush"
168
(9 Feb 1996)
Example 2: Entry for a Level 1 drum recorder, where setpageparams has not
169
Level 2 devices
the offset values provided by the user. The code used to obtain the maximum
width and height is only appropriate for devices that support the setpagedevice
key OutputDevice and a particular form of the PageSize value in the
OutputDevice resource, as documented in the appropriate PostScript language
supplement for the product.
This sample Level 2 code is more verbose than the equivalent Level 1 code
because the mapping between the *ParamCustomPageSize parameters and the
setpagedevice keys can be complicated. When writing your own code, consult
the diagram of orientations in Figure 3, section 5.16 of this document. If the
value of Orientation produces different positions of the pages on the media than
described in these examples, you can still use the examples as a starting point
and change the numbers in the arrays to correctly map the custom page size
parameter Orientation to the setpagedevice key Orientation in the invocation code.
170
(9 Feb 1996)
Example 3: Entry for a Level 2 capstan recorder that accepts only roll-fed
media. This example assumes that a portrait page with Orientation equal to 0 in
the currentpagedevice dictionary results in the same positioning of the page on
the media as when the *ParamCustomPageSize parameter Orientation is 0 and
Width is greater than the Height. Note the order of the parameters on the stack
dictated by *ParamCustomPageSize.
*CenterRegistered: False
*DefaultLeadingEdge: PreferLong
*LeadingEdge Long:
*LeadingEdge PreferLong:
*LeadingEdge Short:
*ParamCustomPageSize Width: 3 points 100 1008
*ParamCustomPageSize Height: 4 points 100 3000
*ParamCustomPageSize WidthOffset/Width Margin: 1 points 0 908
*ParamCustomPageSize HeightOffset/Height Margin: 2 points 0 2900
*ParamCustomPageSize Orientation: 5 int 0 3
*NonUIOrderDependency: 30 AnySetup *CustomPageSize
*CustomPageSize True: "
3 copy 2 mod 0 eq {
2 copy eq {
1 add
}{
5 -2 roll exch 5 2 roll
} ifelse
} if
[0 0 2 2] [3 1 1 3]
4 2 roll lt {exch} if pop
exch get
(<<) cvx exec
/Orientation 3 -1 roll
/PageSize [ 7 -2 roll ]
/PageOffset [ 9 -2 roll ]
/ImagingBBox null
(>>) cvx exec setpagedevice"
*End
*MaxMediaWidth: "1008"
*?CurrentMediaWidth: "
currentpagedevice /OutputDevice get
/OutputDevice findresource
/PageSize get 0 get 2 get = flush
"
*End
*MaxMediaHeight: "3000"
*?CurrentMediaHeight: "
currentpagedevice /OutputDevice get
/OutputDevice findresource
/PageSize get 0 get 3 get = flush
"
*End
171
Example 4: The code for a roll-fed drum recorder may be slightly different from
the code for a capstan recorder. This example assumes that the setpagedevice
key Orientation on the drum recorder produces the same results as the capstan
172
(9 Feb 1996)
Cut-sheet media
manual feed slot, fed short-edge first, and the hardware imposes margins of 1
inch at the top and bottom and 1/2 inch on the sides. These entries would
appear in addition to the entries shown in Example 3.
*HWMargins: 72 36 72 36
*UseHWMargins True:
*UseHWMargins False:
*DefaultUseHWMargins: False
*NonUIConstraints: *InputSlot Cassette *UseHWMargins True
*NonUIConstraints: *UseHWMargins True *InputSlot Cassette
*NonUIConstraints: *ManualFeed True *UseHWMargins False
*NonUIConstraints: *UseHWMargins False *ManualFeed True
*NonUIConstraints: *InputSlot Cassette *ManualFeed True
*NonUIConstraints: *ManualFeed True *InputSlot Cassette
*NonUIConstraints: *ManualFeed True *LeadingEdge PreferLong
*NonUIConstraints: *ManualFeed True *LeadingEdge Long
*NonUIConstraints: *LeadingEdge Long *ManualFeed True
*NonUIConstraints: *LeadingEdge PreferLong *ManualFeed True
173
Most devices that accept only cut-sheet media do not support the concept of
offsetting the image in a particular direction. On such devices, WidthOffset and
HeightOffset should be discarded by the *CustomPageSize code. Level 2 devices
that do support offsetting will do so with one of the following setpagedevice
keys:
Margins, which should not be used for this purpose. Margins, which is
measured in device units, is intended to be used to compensate for
mechanical misadjustments in the device, not to position output on the
page. Do not use it in *CustomPageSize code.
PageOffset, which is intended for this purpose. WidthOffset, HeightOffset, and
PageOffset are all defined in points (1/72 of an inch), so no conversion is
necessary. However, the direction of offset for PageOffset is in device
space, which may cause problems for a rotated page. Test the custom page
size code carefully with different combinations of Orientation, WidthOffset,
and HeightOffset. In each case, WidthOffset should remain relative to Width, and
HeightOffset should remain relative to Height. If this does not happen, you
will have to amend the *CustomPageSize code so that it manipulates the
offset values to compensate for Orientation before passing them to
PageOffset.
ImageShift is defined in default user space, so the *CustomPageSize code
can pass the values of WidthOffset and HeightOffset directly into ImageShift.
However, if the device also performs duplex printing on custom page
sizes, this combination should be carefully tested with WidthOffset and
HeightOffset to make sure the image is offset in the proper direction on both
sides of the page, as ImageShift was designed to shift the image differently on the front and back sides of a page. In this case, PageOffset may
work better.
If the device does not support either of the setpagedevice keys PageOffset or
ImageShift, or if the manufacturer does not want image offsetting to be supported in custom page sizes on the device, change the min and max range
values for WidthOffset and HeightOffset to 0:
*ParamCustomPageSize WidthOffset: 3 points 0 0
*ParamCustomPageSize HeightOffset: 4 points 0 0
and rewrite the *CustomPageSize code to discard the values of WidthOffset and
HeightOffset. Be careful to keep the dictionary mark on the stack.
174
(9 Feb 1996)
Example 6: This is a sample custom page size entry for a PostScript Level 2
device that accepts only cut-sheet media, supports custom page sizes fed
short-edge first only through the manual feed slot, and does not support
offsetting or the setpagedevice key Orientation. The *CustomPageSize code first
discards the values of HeightOffset and WidthOffset by popping them off the stack.
(Note the order of the parameters.) Next, Orientation is checked (and discarded,
since it is not supported by the device); if it is even, the values of Width and
Height are exchanged so that they will be in the correct order for the requested
landscape or portrait page. This code assumes that Width, Height, and Orientation
have been calculated as described in Table 2 in section 5.16 and that all
values were put on the stack in the correct order.
*HWMargins: 72 36 72 36
*LeadingEdge Short:
*DefaultLeadingEdge: Short
*NonUIConstraints: *InputSlot Upper *ManualFeed True
*NonUIConstraints: *ManualFeed True *InputSlot Upper
*NonUIConstraints: *ManualFeed False *CustomPageSize True
*NonUIConstraints: *CustomPageSize True *ManualFeed False
*MaxMediaWidth: 792
*MaxMediaHeight: 1008
*CustomPageSize True: "
pop pop
2 mod 0 eq {exch} if
(<<) cvx exec
/PageSize [ 5 -2 roll ]
/ImagingBBox null
(>>) cvx exec setpagedevice
"
*End
*ParamCustomPageSize Width: 1 points 100 1008
*ParamCustomPageSize Height: 2 points 100 1008
*ParamCustomPageSize WidthOffset: 4 points 0 0
*ParamCustomPageSize HeightOffset: 5 points 0 0
*ParamCustomPageSize Orientation: 3 int 0 3
supported by devices that accept only cut-sheet media, so they are omitted
from this example. *UseHWMargins is omitted because this device can only
print within the hardware-imposed margins (this is true for most cut-sheetonly devices), so there is no choice to be made about using *HWMargins (it
must be used).
175
176
(9 Feb 1996)
The page size option keyword qualifier Transverse is often misused. Check
for the following:
- 1. Transverse sizes should not appear in the PPD file of a cut-sheet device
that supports either short-edge-feed or long-edge-feed but not both. If a
device supports only one feed direction, there is no reason to have
Transverse sizes listed in the PPD. Transverse is used to designate a page
size that is fed differently from other page sizes on the device.
- 2. If a cut-sheet device does support 2 media feed directions and they
are selectable via PostScript code, the *PageSize code for equivalent
Transverse and non-Transverse sizes (for example, Letter and
Letter.Transverse) should request the same page size (with the dimensions
in the same order, to preserve the correct image orientation on the
page), but should do whatever it takes to ensure that the page is fed
from the correct tray. This might mean that the code requests a different
page orientation (if the setpagedevice key /Orientation is supported by the
device) or a different input slot, as shown here:
*PageSize Letter: .../PageSize [612 792]
/MediaPosition 1...
*End
*PageSize Letter.Transverse: .../PageSize [612 792]
/MediaPosition 0...
*End
The whole point of Transverse is for the user to say this device usually
feeds Letter from the short-edge-feed input tray, but this time I want a
Letter page from the long-edge-feed tray. The physical size is the same,
but the feed direction is different, and code needs to be sent to invoke
that difference. However, the *PageRegion code fragments for the equivalent Transverse and non-Transverse sizes will usually be identical to each
other, because *PageRegion should not select an input tray; it should only
request the page dimensions,which are the same for the Transverse and
non-Transverse size.
- 3. On a roll-fed device, the *PageSize code for Transverse pages will
request a different /Orientation than the *PageSize code for the equivalent
non-Transverse size. For example:
*PageSize Letter: .../PageSize [612 792]
/Orientation 1...
*End
*PageSize Letter.Transverse: .../PageSize [612 792]
/Orientation 0...
*End
177
Again, the page size dimensions should be in the same order, at least for
most roll-fed devices. The *PageSize and *PageRegion code fragments will
usually be identical, since on a roll-fed device the *PageSize code does
not usually invoke an input slot, so it performs the same function as the
*PageRegion code.
- 4. The page size dimensions should be in the same order in all relevant
keywords (*PageSize, *PageRegion, *ImageableArea, *PaperDimension) for
equivalent Transverse and non-Transverse sizes.
- 5. If the intent is to produce a landscape page, you should use Rotated or
R as the suffix (for example, A4Rotated or LetterR) instead of Transverse.
Most print managers perform landscape rotation internally, so there's
really no need for special landscape page sizes in a PPD file, unless it
will be used in an environment where the print manager does not provide this service. If landscape page sizes are included in the PPD file,
their dimensions in all relevant keywords should be in reversed from the
dimensions of the equivalent non-Transverse size. For example:
*PaperDimension LetterRotated: 792 612
*PaperDimension Letter: 612 792
Make sure that the imageable area for each page size is within its bounding box as defined by *PaperDimension for that page size.
Make sure the *?ImageableArea query ends with the following code, as in the
examples in section 6:
repeat ( ) = flush
The first example ensures that the string returned from the query terminates with a newline, which is a new requirement of the 4.3 specification.
Make sure that all user-selectable features are surrounded by *OpenUI/
*CloseUI pairs as needed, and that each entry is complete (contains a *Default
keyword, *OrderDependency statement, main keyword with options and code
to invoke the feature, and query code if a query keyword exists for that feature and if query code can be written).
Make sure that the strings returned by query code do not include any
translation strings; they should return only option names, and they must be
terminated by a newline (usually accomplished by ending the code with
the sequence = flush).
Make sure the devices error and status messages have been included.
178
(9 Feb 1996)
Make sure that color separation information is present for each resolution.
Most critical: Make sure that every piece of PostScript code in the PPD
file has been thoroughly tested against the device, with all variables, such
as invoking different input slots and page sizes.
Test the PPD file with different print managers and applications. Make
sure that all features that are surrounded by *OpenUI/*CloseUI in the PPD file
are selectable from the print manager. Test the functionality of the print
manager and PPD file by printing a sample document, using the different
PPD file options. For example, select Duplex and Lower Tray and make sure
that document is printed from the lower tray and is printed on both sides of
the page. Test the functionality of all the features in the PPD file. Test the
PPD file and print manager by printing from more than one application.
7.1
If you are building a PPD file for a Kanji (Japanese font) product, you should
be aware of the following guidelines, which have evolved over time and are
now an accepted part of the PPD file building process. These are not requirements of this specification, and failure to follow these guidelines should not
be considered an error in the PPD file. They are recommendations, intended
to provide some uniformity in PPD files.
*ModelName should include the word Kanji. For example:
*ModelName: ACME Maxi-Print Kanji
*NickName should include the word Kanji as well as the PostScript interpreter version number. For example:
*NickName: ACME Maxi-Print Kanji v2013.114
*ShortNickName should include the word Kanji. If you have to shorten the
name to squeeze it into 31 characters, shorten another part of the name.
Leave the word Kanji to differentiate this product from any equivalent
Roman product.
*PCFileName: The 8.3 format name should include a J in the file name,
usually near the end of the name. For example: xxxxxJ_1.PPD or
xxxxxxJ1.PPD. The first two characters must be the assigned manufacturer
prefix.
*PageSize, *PageRegion, *ImageableArea, *PaperDimension: Make sure that any
additional page sizes available on the Kanji product are included, and that
any page sizes that are not available on the Kanji product are deleted.
179
*Font: Make sure that all Kanji fonts built into the product are included in
the list with the correct Character Set, Font Encoding, and Status fields
filled in. This includes fonts on a separate hard disk if the hard disk always
ships with the product. If the hard disk is not part of the minimal configuration for the product, you should create one PPD file for the device in its
minimal configuration, and a second PPD file that represents the product
with the optional hard disk attached.
If the Kanji product comes with more memory than the Roman product,
you will need to make the appropriate changes to *FreeVM, *InstalledMemory,
and *VMOption.
If you are translating strings in the PPD file into Japanese, you will need to
change *LanguageVersion and *LanguageEncoding to the appropriate value. If
the PPD file is to be a cross-platform (portable) file, you must use the
hexadecimal notation for 8-bit byte codes in translation strings. If the file
is platform-specific (for example, Macintosh-only or Windows-only), you
may use 8-bit byte codes directly in the translation strings. You may also
directly translate the values of the following keywords into 8-bit byte
codes, without using translation strings: *ModelName, *ShortNickName,
*NickName, *Manufacturer, *PCFileName, *Include.
180
(9 Feb 1996)
A.1
UI Keywords
This section provides a list of keywords that are typically bracketed by the
*OpenUI/*CloseUI keywords in PPD files. Only the main keywords are listed
here; naturally, their associated defaults and queries would also be included
in the *OpenUI/*CloseUI bracketing. Other keywords may also be bracketed by
*OpenUI/*CloseUI; this list provides only the typical set.
*AdvanceMedia
*BindColor
*BindEdge
*BindType
*BindWhen
*BitsPerPixel
*BlackSubstitution
*Booklet
*Collate
*ColorModel
*CutMedia
*Duplex
*ExitJamRecovery
*FoldType
*FoldWhen
*InputSlot
*InstalledMemory
*Jog
*ManualFeed
*MediaColor
*MediaType
*MediaWeight
*MirrorPrint
*NegativePrint
*OutputBin
*OutputMode
*OutputOrder
*PageSize
*PageRegion
*Separations
*Signature
*Slipsheet
*Smoothing
*Sorter
*StapleLocation
*StapleOrientation
*StapleWhen
*StapleX
*StapleY
*TraySwitch
181
A.2
Repeated Keywords
In the general model, if a main keyword, or specific combination of main and
option keyword, is repeated within a PPD file or in an included PPD file, the
first occurrence has precedence and future occurrences are ignored. For historical reasons, there are certain keywords in a PPD file that do not conform
to the general model; specific main keywords are repeated, but all occurrences are relevant and should be recorded by a parser because their values
are unique. For backward compatibility, the form of these keywords cannot
be changed.
To provide assistance to PPD file parsers, the following is a list of main keywords that do not have option keywords to distinguish one instance from
another, yet all instances are relevant, so all occurrences of this main keyword and its associated unique values should be recorded by the PPD file
parser.
*HalftoneName
*Include
*Message
*NonUIConstraints
*NonUIOrderDependency
*OrderDependency
*PageDeviceName
*PrinterError
*Product
*PSVersion
*QueryOrderDependency
*RenderingIntent
*Source
*Status
*UIConstraints
182
(9 Feb 1996)
Appendix B: Registered
mediaOption Keywords
The tables in this section contain the option keywords currently registered for
mediaOption, which designates a given page size on a device. Table B.1 is
sorted by the mediaOption name. Given the name of a page size, the table provides the dimensions and any additional information about that size.
Table B.2 is sorted by size. This is useful for a person building a PPD file, as
the dimensions of a page size available on a device can be looked up in the
table and it can be determined if there is already a mediaOption defined for that
size.
Only the most common page sizes are specified here. A device manufacturer
is free to list a new size in a PPD file for a new device. However, care should
be taken to avoid duplicating the semantics of an already-registered option
keyword. Also, when creating a new option keyword, the capitalization conventions shown in the tables should be followed as much as possible; that is,
the first letters of logical words should be capitalized.
Note
Builders of PPD files should always use existing mediaOption names where
possible, because some applications and users have come to rely on these
standard names for page sizes. Also, keeping paper size names consistent
reduces user confusion. Builders of PPD files should define new mediaOptions
only when there is no existing mediaOption that describes a certain page size.
See section 5.13 for more information on mediaOption, and section 5.1 for
information on defining new option keywords.
183
B.1
184
(9 Feb 1996)
185
Page sizes with the qualifier Transverse should only appear in the PPD file
of a roll-fed device (such as an imagesetter) that supports requesting a specific orientation so that pages can be either short-edge feed or long-edge
feed, or in the PPD file of a cut-sheet device that has both short-edge-feed
and long-edge-feed input trays. If a cut-sheet device supports either shortedge-feed or long-edge-feed, but not both, there is no need to differentiate
Transverse pages from non-Transverse pages. Transverse is only useful if there
is a need to choose between two input slots with different feed directions.
If a page size has both a Transverse and non-Transverse version in a PPD file,
their *PageSize code fragments should be different. For example, in a PPD
file for a Level 2 device, the *PageSize code for Letter.Transverse should
request a different /Orientation from setpagedevice than the code for Letter, or
it should set up a different input slot. Otherwise, including both the Transverse and non-Transverse size is pointless, if they produce exactly the same
result. See section 7 for more advice and examples of putting Transverse
sizes in a PPD file.
B.2
186
(9 Feb 1996)
Size (pts)
Size (mm)
Size (inches)
Notes
#define
10x11
720 x 792
254 x 279.4
10 x 11
10x13
720 x 936
254 x 330.2
10 x 13
10x14
720 x 1008
254 x 355.6
10 x 14
DMPAPER_10X14
12x11
864 x 792
304.8 x 279.4
12 x 11
DMPAPER_12X11
15x11
1080 x 792
381 x 279.4
15 x 11
DMPAPER_15X11
7x9
504 x 648
177.8 x 228.6
7x9
8x10
576 x 720
203.2 x 254
8 x 10
9x11
648 x 792
228.6 x 279.4
9 x 11
9x12
648 x 864
228.6 x 304.8
9 x 12
A0
2384 x 3370
841 x 1189
33.11 x 46.81
I, J
A1
1684 x 2384
594 x 841
23.39 x 33.11
I, J
A2
1191 x 1684
420 x 594
16.54 x 23.39
I, J
DMPAPER_A2
A3
842 x 1191
297 x 420
11.69 x 16.54
I, J
DMPAPER_A3
A3.Transverse
842 x 1191
297 x 420
11.69 x 16.54
A3Extra
913 x 1262
322 x 445
12.67 x 17.52
N, V
DMPAPER_A3_EXTRA
A3Extra.Transverse
913 x 1262
322 x 445
12.67 x 17.52
N, V
DMPAPER_A3_EXTRA_TRANSVERSE
A3Rotated
1191 x 842
420 x 297
16.54 x 11.69
DMPAPER_A3_ROTATED
A4
595 x 842
210 x 297
8.27 x 11.69
I, J
DMPAPER_A4
A4.Transverse
595 x 842
210 x 297
8.27 x 11.69
A4Extra
667 x 914
235.5 x 322.3
9.27 x 12.69
A4Plus
595 x 936
210 x 330
8.27 x 13
A4Rotated
842 x 595
297 x 210
11.69 x 8.27
DMPAPER_A4_ROTATED
A4Small
595 x 842
210 x 297
8.27 x 11.69
DMPAPER_A4SMALL
A5
420 x 595
148 x 210
5.83 x 8.27
I, J
DMPAPER_A5
A5.Transverse
420 x 595
148 x 210
5.83 x 8.27
A5Extra
492 x 668
174 x 235
6.85 x 9.25
N, V
DMPAPER_A5_EXTRA
A5Rotated
595 x 420
210 x 148
8.27 x 5.83
DMPAPER_A5_ROTATED
A6
297 x 420
105 x 148
4.13 x 5.83
I, J
DMPAPER_A6
A6Rotated
420 x 297
148 x 105
5.83 x 4.13
DMPAPER_A6_ROTATED
DMPAPER_10X11
DMPAPER_9X11
DMPAPER_A3_TRANSVERSE
DMPAPER_A4_TRANSVERSE
N, V
DMPAPER_A4_EXTRA
DMPAPER_A4_PLUS
DMPAPER_A5_TRANSVERSE
187
Size (pts)
Size (mm)
Size (inches)
Notes
#define
A7
210 x 297
74 x 105
2.91 x 4.13
I, J
A8
148 x 210
52 x 74
2.05 x 2.91
I, J
A9
105 x 148
37 x 52
1.46 x 2.05
I, J
A10
73 x 105
26 x 37
1.02 x 1.46
I, J
AnsiC
1224 x 1584
431.8 x 558.8
17 x 22
AnsiD
1584 x 2448
558.8 x 863.6
22 x 34
AnsiE
2448 x 3168
863.6 x 1118
34 x 44
ARCHA
648 x 864
228.6 x 304.8
9 x 12
ARCHB
864 x 1296
304.8 x 457.2
12 x 18
ARCHC
1296 x 1728
457.2 x 609.6
18 x 24
DMPAPER_CSHEET
ARCHD
1728 x 2592
609.6 x 914.4
24 x 36
DMPAPER_DSHEET
ARCHE
2592 x 3456
914.4 x 1219
36 x 48
DMPAPER_ESHEET
B0
2920 x 4127
1030 x 1456
40.55 x 57.32
B1
2064 x 2920
728 x 1030
28.66 x 40.55
B2
1460 x 2064
515 x 728
20.28 x 28.66
B3
1032 x 1460
364 x 515
14.33 x 20.28
B4
729 x 1032
257 x 364
10.12 x 14.33
DMPAPER_B4
B4Rotated
1032 x 729
364 x 257
14.33 x 10.12
DMPAPER_B4_JIS_ROTATED
B5
516 x 729
182 x 257
7.17 x 10.12
DMPAPER_B5
B5.Transverse
516 x 729
182 x 257
7.17 x 10.12
B5Rotated
729 x 516
257 x 182
10.12 x 7.17
DMPAPER_B5_JIS_ROTATED
B6
363 x 516
128 x 182
5.04 x 7.17
DMPAPER_B6_JIS
B6Rotated
516 x 363
182 x 128
7.17 x 5.04
DMPAPER_B6_JIS_ROTATED
B7
258 x 363
91 x 128
3.58 x 5.04
B8
181 x 258
64 x 91
2.52 x 3.58
B9
127 x 181
45 x 64
1.77 x 2.52
B10
91 x 127
32 x 45
1.26 x 1.77
C4 (use EnvC4)
649 x 918
229 x 324
9.02 x 12.75
I, E, N
DMPAPER_ENV_C4
C5 (use EnvC5)
459 x 649
162 x 229
6.38 x 9.02
I, E, N
DMPAPER_ENV_C5
C6 (use EnvC6)
323 x 459
114 x 162
4.49 x 6.38
I, E, N
DMPAPER_ENV_C6
188
DMPAPER_B5_TRANSVERSE
(9 Feb 1996)
Size (pts)
Size (mm)
Size (inches)
Notes
#define
297 x 684
104.8 x 241.3
4.125 x 9.5
E, N
DMPAPER_ENV_10
DL (use EnvDL)
312 x 624
110 x 220
4.33 x 8.66
I, E, N
DMPAPER_ENV_DL
DoublePostcard
567 x 419.5
200 x 148
7.87 x 5.83
DoublePostcardRotated
419.5 x 567
148 x 200
5.83 x 7.87
DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED
Env9
279 x 639
98.4 x 225.4
3.875 x 8.875
DMPAPER_ENV_9
Env10
297 x 684
104.8 x 241.3
4.125 x 9.5
DMPAPER_ENV_10
Env11
324 x 747
114.3 x 263.5
4.5 x 10.375
DMPAPER_ENV_11
Env12
342 x 792
120.7 x 279.4
4.75 x 11
DMPAPER_ENV_12
Env14
360 x 828
127 x 292.1
5 x 11.5
DMPAPER_ENV_14
EnvC0
2599 x 3676
917 x 1297
36.10 x 51.06
I, E
EnvC1
1837 x 2599
648 x 917
25.51 x 36.10
I, E
EnvC2
1298 x 1837
458 x 648
18.03 x 25.51
I, E
EnvC3
918 x 1296
324 x 458
12.75 x 18.03
I, E
DMPAPER_ENV_C3
EnvC4
649 x 918
229 x 324
9.02 x 12.75
I, E
DMPAPER_ENV_C4
EnvC5
459 x 649
162 x 229
6.38 x 9.02
I, E
DMPAPER_ENV_C5
EnvC6
323 x 459
114 x 162
4.49 x 6.38
I, E
DMPAPER_ENV_C6
EnvC65
324 x 648
114 x 229
4.5 x 9
DMPAPER_ENV_C65
EnvC7
230 x 323
81 x 114
3.19 x 4.49
I, E
EnvChou3
340 x 666
120 x 235
4.72 x 9.25
DMPAPER_JENV_CHOU3
EnvChou3Rotated
666 x 340
235 x 120
9.25 x 4.72
E, N
DMPAPER_JENV_CHOU3_ROTATED
EnvChou4
255 x 581
90 x 205
3.54 x 8
DMPAPER_JENV_CHOU4
EnvChou4Rotated
581 x 255
205 x 90
8 x 3.54
E, N
DMPAPER_JENV_CHOU4_ROTATED
EnvDL
312 x 624
110 x 220
4.33 x 8.66
I, E
DMPAPER_ENV_DL
EnvInvite
624 x 624
220 x 220
8.66 x 8.66
DMPAPER_ENV_INVITE
EnvISOB4
708 x 1001
250 x 353
9.84 x 13.9
DMPAPER_ENV_B4
EnvISOB5
499 x 709
176 x 250
6.9 x 9.8
DMPAPER_ENV_B5
EnvISOB6
499 x 354
176 x 125
6.9 x 4.9
DMPAPER_ENV_B6
EnvItalian
312 x 652
110 x 230
4.33 x 9
DMPAPER_ENV_ITALY
EnvKaku2
680 x 941
240 x 332
9.45 x 13
DMPAPER_JENV_KAKU2
EnvKaku2Rotated
941 x 680
332 x 240
13 x 9.45
E, N
DMPAPER_JENV_KAKU2_ROTATED
DMPAPER_DBL_JAPANESE_POSTCARD
189
Size (pts)
Size (mm)
Size (inches)
Notes
#define
EnvKaku3
612 x 785
216 x 277
8.5 x 10.9
DMPAPER_JENV_KAKU3
EnvKaku3Rotated
785 x 612
277 x 216
10.9 x 8.5
E, N
DMPAPER_JENV_KAKU3_ROTATED
EnvMonarch
279 x 540
98.43 x 190.5
3.875 x 7.5
DMPAPER_ENV_MONARCH
EnvPersonal
261 x 468
92.08 x 165.1
3.625 x 6.5
DMPAPER_ENV_PERSONAL
EnvPRC1
289 x 468
102 x 165
4 x 6.5
DMPAPER_PENV_1
EnvPRC1Rotated
468 x 289
165 x 102
6.5 x 4
E, N
DMPAPER_PENV_1_ROTATED
EnvPRC2
289 x 499
102 x 176
4 x 6.9
DMPAPER_PENV_2
EnvPRC2Rotated
499 x 289
176 x 102
6.9 x 4
E, N
DMPAPER_PENV_2_ROTATED
EnvPRC3
354 x 499
125 x 176
4.9 x 6.9
DMPAPER_PENV_3
EnvPRC3Rotated
499 x 354
176 x 125
6.9 x 4.9
E, N
DMPAPER_PENV_3_ROTATED
EnvPRC4
312 x 590
110 x 208
4.33 x 8.2
DMPAPER_PENV_4
EnvPRC4Rotated
590 x 312
208 x 110
8.2 x 4.33
E, N
DMPAPER_PENV_4_ROTATED
EnvPRC5
312 x 624
110 x 220
4.33 x 8.66
DMPAPER_PENV_5
EnvPRC5Rotated
624 x 312
220 x 110
8.66 x 4.33
E, N
DMPAPER_PENV_5_ROTATED
EnvPRC6
340 x 652
120 x 230
4.7 x 9
DMPAPER_PENV_6
EnvPRC6Rotated
652 x 340
230 x 120
9 x 4.7
E, N
DMPAPER_PENV_6_ROTATED
EnvPRC7
454 x 652
160 x 230
6.3 x 9
DMPAPER_PENV_7
EnvPRC7Rotated
652 x 454
230 x 160
9 x 6.3
E, N
DMPAPER_PENV_7_ROTATED
EnvPRC8
340 x 876
120 x 309
4.7 x 12.2
DMPAPER_PENV_8
EnvPRC8Rotated
876 x 340
309 x 120
12.2 x 4.7
E, N
DMPAPER_PENV_8_ROTATED
EnvPRC9
649 x 918
229 x 324
9 x 12.75
DMPAPER_PENV_9
EnvPRC9Rotated
918 x 649
324 x 229
12.75 x 9
E, N
DMPAPER_PENV_9_ROTATED
EnvPRC10
918 x 1298
324 x 458
12.75 x 18
DMPAPER_PENV_10
EnvPRC10Rotated
1298 x 918
458 x 324
18 x 12.75
E, N
DMPAPER_PENV_10_ROTATED
EnvYou4
298 x 666
105 x 235
4.13 x 9.25
DMPAPER_JENV_YOU4
EnvYou4Rotated
666 x 298
235 x 105
9.25 x 4.13
E, N
DMPAPER_JENV_YOU4_ROTATED
Executive
522 x 756
184.2 x 266.7
7.25 x 10.5
N, V
DMPAPER_EXECUTIVE
FanFoldUS
1071 x 792
377.8 x 279.4
14.875 x 11
DMPAPER_FANFOLD_US
FanFoldGerman
612 x 864
215.9 x 304.8
8.5 x 12
DMPAPER_FANFOLD_STD_GERMAN
FanFoldGermanLegal
612 x 936
215.9 x 330
8.5 x 13
DMPAPER_FANFOLD_LGL_GERMAN
190
(9 Feb 1996)
Size (pts)
Size (mm)
Size (inches)
Notes
#define
Folio
595 x 935
210 x 330
8.27 x 13
ISOB0
2835 x 4008
1000 x 1414
39.37 x 55.67
ISOB1
2004 x 2835
707 x 1000
27.83 x 39.37
ISOB2
1417 x 2004
500 x 707
19.68 x 27.83
ISOB3
1001 x 1417
353 x 500
13.90 x 19.68
ISOB4
709 x 1001
250 x 353
9.84 x 13.90
ISOB5
499 x 709
176 x 250
6.9 x 9.8
ISOB5Extra
569.7 x 782
201 x 276
7.9 x 10.8
N, V
ISOB6
354 x 499
125 x 176
4.92 x 6.93
ISOB7
249 x 354
88 x 125
3.46 x 4.92
ISOB8
176 x 249
62 x 88
2.44 x 3.46
ISOB9
125 x 176
44 x 62
1.73 x 2.44
ISOB10
88 x 125
31 x 44
1.22 x 1.73
Ledger
1224 x 792
431.8 x 279.4
17 x 11
DMPAPER_LEDGER
Legal
612 x 1008
215.9 x 355.6
8.5 x 14
DMPAPER_LEGAL
LegalExtra
684 x 1080
241.3 x 381
9.5 x 15
Letter
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_LETTER
Letter.Transverse
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_LETTER_TRANSVERSE
LetterExtra
684 x 864
241.3 x 304.8
9.5 x 12
LetterExtra.Transverse
684 x 864
241.3 x 304.8
9.5 x 12
DMPAPER_LETTER_EXTRA_TRANSVERSE
LetterPlus
612 x 913.7
215.9 x 322.3
8.5 x 12.69
DMPAPER_LETTER_PLUS
LetterRotated
792 x 612
279.4 x 215.9
11 x 8.5
DMPAPER_LETTER_ROTATED
LetterSmall
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_LETTERSMALL
MaxPage
largest page
available on
this device
N, V
279 x 540
98.43 x 190.5
3.875 x 7.5
E, N
DMPAPER_ENV_MONARCH
Note
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_NOTE
Postcard
284 x 419
100 x 148
3.94 x 5.83
PostcardRotated
419 x 284
148 x 100
5.83 x 3.94
PRC16K
414 x 610
146 x 215
5.75 x 8.5
PRC16KRotated
610 x 414
215 x 146
8.5 x 5.75
DMPAPER_FOLIO
N, V
N, V
DMPAPER_ISO_B4
DMPAPER_B5_EXTRA
DMPAPER_LEGAL_EXTRA
DMPAPER_LETTER_EXTRA
DMPAPER_JAPANESE_POSTCARD
DMPAPER_JAPANESE_POSTCARD_ROTATED
DMPAPER_P16K
DMPAPER_P16K_ROTATED
191
Size (pts)
Size (mm)
Size (inches)
Notes
#define
PRC32K
275 x 428
97 x 151
3.82 x 5.95
DMPAPER_P32K
PRC32KBig
275 x 428
97 x 151
3.82 x 5.95
DMPAPER_P32KBIG
PRC32KBigRotated
428 x 275
151 x 97
5.95 x 3.82
DMPAPER_P32KBIG_ROTATED
PRC32KRotated
428 x 275
151 x 97
5.95 x 3.82
DMPAPER_P32K_ROTATED
Quarto
610 x 780
215.9 x 275.1
8.5 x 10.83
DMPAPER_QUARTO
Statement
396 x 612
139.7 x 215.9
5.5 x 8.5
DMPAPER_STATEMENT
SuperA
643 x 1009
227 x 356
8.94 x 14
DMPAPER_A_PLUS
SuperB
864 x 1380
305 x 487
12 x 19.17
DMPAPER_B_PLUS
Tabloid
792 x 1224
279.4 x 431.8
11 x 17
DMPAPER_TABLOID
TabloidExtra
864 x 1296
304.8 x 457.2
12 x 18
192
DMPAPER_TABLOID_EXTRA
(9 Feb 1996)
.
Table B.2 MediaOptions Sorted By Size
mediaOption
Size (pts)
Size (mm)
Size (inches)
Notes
#define
A10
73 x 105
26 x 37
1.02 x 1.46
I, J
ISOB10
88 x 125
31 x 44
1.22 x 1.73
B10
91 x 127
32 x 45
1.26 x 1.77
A9
105 x 148
37 x 52
1.46 x 2.05
I, J
ISOB9
125 x 176
44 x 62
1.73 x 2.44
B9
127 x 181
45 x 64
1.77 x 2.52
A8
148 x 210
52 x 74
2.05 x 2.91
I, J
ISOB8
176 x 249
62 x 88
2.44 x 3.46
B8
181 x 258
64 x 91
2.52 x 3.58
A7
210 x 297
74 x 105
2.91 x 4.13
I, J
EnvC7
230 x 323
81 x 114
3.19 x 4.49
I, E
ISOB7
249 x 354
88 x 125
3.46 x 4.92
EnvChou4
255 x 581
90 x 205
3.54 x 8
B7
258 x 363
91 x 128
3.58 x 5.04
EnvPersonal
261 x 468
92.08 x 165.1
3.625 x 6.5
PRC32K
275 x 428
97 x 151
3.82 x 5.95
DMPAPER_P32K
PRC32KBig
275 x 428
97 x 151
3.82 x 5.95
DMPAPER_P32KBIG
279 x 540
98.43 x 190.5
3.875 x 7.5
DMPAPER_ENV_MONARCH
Env9
279 x 639
98.4 x 225.4
3.875 x 8.875
DMPAPER_ENV_9
Postcard
284 x 419
100 x 148
3.94 x 5.83
EnvPRC1
289 x 468
102 x 165
4 x 6.5
DMPAPER_PENV_1
EnvPRC2
289 x 499
102 x 176
4 x 6.9
DMPAPER_PENV_2
297 x 684
104.8 x 241.3
4.125 x 9.5
E, N
DMPAPER_ENV_10
A6
297 x 420
105 x 148
4.13 x 5.83
I, J
DMPAPER_A6
EnvYou4
298 x 666
105 x 235
4.13 x 9.25
DMPAPER_JENV_YOU4
EnvPRC4
312 x 590
110 x 208
4.33 x 8.2
DMPAPER_PENV_4
DL (use EnvDL)
312 x 624
110 x 220
4.33 x 8.66
I, E
DMPAPER_ENV_DL
EnvPRC5
312 x 624
110 x 220
4.33 x 8.66
DMPAPER_PENV_5
EnvItalian
312 x 652
110 x 230
4.33 x 9
DMPAPER_ENV_ITALY
DMPAPER_JENV_CHOU4
DMPAPER_ENV_PERSONAL
DMPAPER_JAPANESE_POSTCARD
193
Size (pts)
Size (mm)
Size (inches)
Notes
#define
C6 (use EnvC6)
323 x 459
114 x 162
4.49 x 6.38
I, E
DMPAPER_ENV_C6
EnvC65
324 x 648
114 x 229
4.5 x 9
DMPAPER_ENV_C65
Env11
324 x 747
114.3 x 263.5
4.5 x 10.375
DMPAPER_ENV_11
EnvPRC6
340 x 652
120 x 230
4.7 x 9
DMPAPER_PENV_6
EnvChou3
340 x 666
120 x 235
4.72 x 9.25
DMPAPER_JENV_CHOU3
EnvPRC8
340 x 876
120 x 309
4.7 x 12.2
DMPAPER_PENV_8
Env12
342 x 792
120.7 x 279.4
4.75 x 11
DMPAPER_ENV_12
ISOB6
354 x 499
125 x 176
4.92 x 6.93
EnvPRC3
354 x 499
125 x 176
4.9 x 6.9
DMPAPER_PENV_3
Env14
360 x 828
127 x 292.1
5 x 11.5
DMPAPER_ENV_14
B6
363 x 516
128 x 182
5.04 x 7.17
DMPAPER_B6_JIS
Statement
396 x 612
139.7 x 215.9
5.5 x 8.5
DMPAPER_STATEMENT
PRC16K
414 x 610
146 x 215
5.75 x 8.5
DMPAPER_P16K
PostcardRotated
419 x 284
148 x 100
5.83 x 3.94
A6Rotated
420 x 297
148 x 105
5.83 x 4.13
DoublePostcardRotated
419.5 x 567
148 x 200
5.83 x 7.87
DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED
A5
420 x 595
148 x 210
5.83 x 8.27
I, J
DMPAPER_A5
A5.Transverse
420 x 595
148 x 210
5.83 x 8.27
PRC32KBigRotated
428 x 275
151 x 97
5.95 x 3.82
DMPAPER_P32KBIG_ROTATED
PRC32KRotated
428 x 275
151 x 97
5.95 x 3.82
DMPAPER_P32K_ROTATED
EnvPRC7
454 x 652
160 x 230
6.3 x 9
DMPAPER_PENV_7
C5 (use EnvC5)
459 x 649
162 x 229
6.38 x 9.02
I, E
DMPAPER_ENV_C5
EnvPRC1Rotated
468 x 289
165 x 102
6.5 x 4
E, N
DMPAPER_PENV_1_ROTATED
A5Extra
492 x 668
174 x 235
6.85 x 9.25
N, V
DMPAPER_A5_EXTRA
EnvPRC2Rotated
499 x 289
176 x 102
6.9 x 4
E, N
DMPAPER_PENV_2_ROTATED
EnvISOB6
499 x 354
176 x 125
6.9 x 4.9
DMPAPER_ENV_B6
EnvPRC3Rotated
499 x 354
176 x 125
6.9 x 4.9
E, N
DMPAPER_PENV_3_ROTATED
EnvISOB5
499 x 709
176 x 250
6.9 x 9.8
DMPAPER_ENV_B5
ISOB5
499 x 709
176 x 250
6.9 x 9.8
7x9
504 x 648
177.8 x 228.6
7x9
194
DMPAPER_JAPANESE_POSTCARD_ROTATED
DMPAPER_A6_ROTATED
DMPAPER_A5_TRANSVERSE
(9 Feb 1996)
Size (pts)
Size (mm)
Size (inches)
Notes
#define
B6Rotated
516 x 363
182 x 128
7.17 x 5.04
DMPAPER_B6_JIS_ROTATED
B5
516 x 729
182 x 257
7.17 x 10.12
DMPAPER_B5
B5.Transverse
516 x 729
182 x 257
7.17 x 10.12
Executive
522 x 756
184.2 x 266.7
7.25 x 10.5
DoublePostcard
567 x 419.5
200 x 148
7.87 x 5.83
ISOB5Extra
569.7 x 782
201 x 276
7.9 x 10.8
8x10
576 x 720
203.2 x 254
8 x 10
EnvChou4Rotated
581 x 255
205 x 90
EnvPRC4Rotated
590 x 312
A5Rotated
DMPAPER_B5_TRANSVERSE
N, V
DMPAPER_EXECUTIVE
DMPAPER_DBL_JAPANESE_POSTCARD
N, V
DMPAPER_B5_EXTRA
8 x 3.54
E, N
DMPAPER_JENV_CHOU4_ROTATED
208 x 110
8.2 x 4.33
E, N
DMPAPER_PENV_4_ROTATED
595 x 420
210 x 148
8.27 x 5.83
DMPAPER_A5_ROTATED
A4
595 x 842
210 x 297
8.27 x 11.69
I, J
DMPAPER_A4
A4.Transverse
595 x 842
210 x 297
8.27 x 11.69
A4Small
595 x 842
210 x 297
8.27 x 11.69
Folio
595 x 935
210 x 330
8.27 x 13
DMPAPER_FOLIO
A4Plus
595 x 936
210 x 330
8.27 x 13
DMPAPER_A4_PLUS
PRC16KRotated
610 x 414
215 x 146
8.5 x 5.75
Quarto
610 x 780
215.9 x 275.1
8.5 x 10.83
EnvKaku3
612 x 785
216 x 277
8.5 x 10.9
Letter
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_LETTER
Letter.Transverse
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_LETTER_TRANSVERSE
LetterSmall
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_LETTERSMALL
Note
612 x 792
215.9 x 279.4
8.5 x 11
DMPAPER_NOTE
FanFoldGerman
612 x 864
215.9 x 304.8
8.5 x 12
DMPAPER_FANFOLD_STD_GERMAN
LetterPlus
612 x 913.7
215.9 x 322.3
8.5 x 12.69
DMPAPER_LETTER_PLUS
FanFoldGermanLegal
612 x 936
215.9 x 330
8.5 x 13
DMPAPER_FANFOLD_LGL_GERMAN
Legal
612 x 1008
215.9 x 355.6
8.5 x 14
DMPAPER_LEGAL
EnvPRC5Rotated
624 x 312
220 x 110
8.66 x 4.33
E, N
DMPAPER_PENV_5_ROTATED
EnvInvite
624 x 624
220 x 220
8.66 x 8.66
DMPAPER_ENV_INVITE
SuperA
643 x 1009
227 x 356
8.94 x 14
DMPAPER_A_PLUS
9x11
648 x 792
228.6 x 279.4
9 x 11
DMPAPER_9X11
DMPAPER_A4_TRANSVERSE
DMPAPER_A4SMALL
DMPAPER_P16K_ROTATED
DMPAPER_QUARTO
DMPAPER_JENV_KAKU3
195
Size (pts)
Size (mm)
Size (inches)
Notes
#define
9x12
648 x 864
228.6 x 304.8
9 x 12
ARCHA
648 x 864
228.6 x 304.8
9 x 12
C4 (use EnvC4)
649 x 918
229 x 324
9.02 x 12.75
I, E
DMPAPER_ENV_C4
EnvPRC9
649 x 918
229 x 324
9 x 12.75
DMPAPER_PENV_9
EnvPRC6Rotated
652 x 340
230 x 120
9 x 4.7
E, N
DMPAPER_PENV_6_ROTATED
EnvPRC7Rotated
652 x 454
230 x 160
9 x 6.3
E ,N
DMPAPER_PENV_7_ROTATED
EnvYou4Rotated
666 x 298
235 x 105
9.25 x 4.13
E, N
DMPAPER_JENV_YOU4_ROTATED
EnvChou3Rotated
666 x 340
235 x 120
9.25 x 4.72
E, N
DMPAPER_JENV_CHOU3_ROTATED
A4Extra
667 x 914
235.5 x 322.3
9.27 x 12.69
N, V
DMPAPER_A4_EXTRA
EnvKaku2
680 x 941
240 x 332
9.45 x 13
DMPAPER_JENV_KAKU2
LetterExtra
684 x 864
241.3 x 304.8
9.5 x 12
N, V
DMPAPER_LETTER_EXTRA
LetterExtra.Transverse
684 x 864
241.3 x 304.8
9.5 x 12
N, V
DMPAPER_LETTER_EXTRA_TRANSVERSE
LegalExtra
684 x 1080
241.3 x 381
9.5 x 15
N, V
DMPAPER_LEGAL_EXTRA
EnvISOB4
708 x 1001
250 x 353
9.84 x 13.9
DMPAPER_ENV_B4
ISOB4
709 x 1001
250 x 353
9.84 x 13.90
DMPAPER_ISO_B4
10x11
720 x 792
254 x 279.4
10 x 11
10x13
720 x 936
254 x 330.2
10 x 13
10x14
720 x 1008
254 x 355.6
10 x 14
B5Rotated
729 x 516
257 x 182
10.12 x 7.17
DMPAPER_B5_JIS_ROTATED
B4
729 x 1032
257 x 364
10.12 x 14.33
DMPAPER_B4
EnvKaku3Rotated
785 x 612
277 x 216
10.9 x 8.5
E, N
DMPAPER_JENV_KAKU3_ROTATED
LetterRotated
792 x 612
279.4 x 215.9
11 x 8.5
DMPAPER_LETTER_ROTATED
Tabloid
792 x 1224
279.4 x 431.8
11 x 17
A4Rotated
842 x 595
297 x 210
11.69 x 8.27
DMPAPER_A4_ROTATED
A3
842 x 1191
297 x 420
11.69 x 16.54
I, J
DMPAPER_A3
A3.Transverse
842 x 1191
297 x 420
11.69 x 16.54
DMPAPER_A3_TRANSVERSE
12x11
864 x 792
304.8 x 279.4
12 x 11
DMPAPER_12X11
ARCHB
864 x 1296
304.8 x 457.2
12 x 18
TabloidExtra
864 x 1296
304.8 x 457.2
12 x 18
SuperB
864 x 1380
305 x 487
12 x 19.17
196
DMPAPER_10X11
DMPAPER_10X14
DMPAPER_TABLOID
DMPAPER_TABLOID_EXTRA
DMPAPER_B_PLUS
(9 Feb 1996)
Size (pts)
Size (mm)
Size (inches)
Notes
#define
EnvPRC8Rotated
876 x 340
309 x 120
12.2 x 4.7
E, N
DMPAPER_PENV_8_ROTATED
A3Extra
913 x 1262
322 x 445
12.67 x 17.52
N, V
DMPAPER_A3_EXTRA
A3Extra.Transverse
913 x 1262
322 x 445
12.67 x 17.52
N, V
DMPAPER_A3_EXTRA_TRANSVERSE
EnvPRC9Rotated
918 x 649
324 x 229
12.75 x 9
E, N
DMPAPER_PENV_9_ROTATED
EnvC3
918 x 1296
324 x 458
12.75 x 18.03
I, E
DMPAPER_ENV_C3
EnvPRC10
918 x 1298
324 x 458
12.75 x 18
DMPAPER_PENV_10
EnvKaku2Rotated
941 x 680
332 x 240
13 x 9.45
E, N
DMPAPER_JENV_KAKU2_ROTATED
ISOB3
1001 x 1417
353 x 500
13.90 x 19.68
B4Rotated
1032 x 729
364 x 257
14.33 x 10.12
B3
1032 x 1460
364 x 515
14.33 x 20.28
FanFoldUS
1071 x 792
377.83x
279.4
14.875 x 11
DMPAPER_FANFOLD_US
15x11
1080 x 792
381 x 279.4
15 x 11
DMPAPER_15X11
A3Rotated
1191 x 842
420 x 297
16.54 x 11.69
DMPAPER_A3_ROTATED
A2
1191 x 1684
420 x 594
16.54 x 23.39
I, J
DMPAPER_A2
Ledger
1224 x 792
431.8 x 279.4
17 x 11
AnsiC
1224 x 1584
431.8 x 558.8
17 x 22
ARCHC
1296 x 1728
457.2 x 609.6
18 x 24
EnvPRC10Rotated
1298 x 918
458 x 324
18 x 12.75
E, N
EnvC2
1298 x 1837
458 x 648
18.03 x 25.51
I,E
ISOB2
1417 x 2004
500 x 707
19.68 x 27.83
B2
1460 x 2064
515 x 728
20.28 x 28.66
AnsiD
1584 x 2448
558.8 x 863.6
22 x 34
A1
1684 x 2384
594 x 841
23.39 x 33.11
ARCHD
1728 x 2592
609.6 x 914.4
24 x 36
EnvC1
1837 x 2599
648 x 917
25.51 x 36.10
I, E
ISOB1
2004 x 2835
707 x 1000
27.83 x 39.37
B1
2064 x 2920
728 x 1030
28.66 x 40.55
A0
2384 x 3370
841 x 1189
33.11 x 46.81
I, J
AnsiE
2448 x 3168
863.6 x 1118
34 x 44
DMPAPER_B4_JIS_ROTATED
DMPAPER_LEDGER
DMPAPER_CSHEET
DMPAPER_PENV_10_ROTATED
I, J
DMPAPER_DSHEET
197
Size (pts)
Size (mm)
ARCHE
2592 x 3456
914.4 x 1219
36 x 48
EnvC0
2599 x 3676
917 x 1297
36.10 x 51.06
I, E
ISOB0
2835 x 4008
1000 x 1414
39.37 x 55.67
B0
2920 x 4127
1030 x 1456
40.55 x 57.32
MaxPage
largest page
size available
on this device
N, V
198
Size (inches)
Notes
#define
DMPAPER_ESHEET
(9 Feb 1996)
199
C.1
200
WindowsANSI
unused
space
exclam
quotedbl
numbersign
dollar
percent
ampersand
quotesingle
parenleft
parenright
asterisk
plus
comma
hyphen
period
slash
zero
one
two
three
four
five
six
seven
eight
nine
colon
semicolon
less
equal
greater
question
at
A-Z
bracketleft
backslash
bracketright
asciicircum
ISOLatin1
unused
space
exclam
quotedbl
numbersign
dollar
percent
ampersand
quoteright
parenleft
parenright
asterisk
plus
comma
minus
period
slash
zero
one
two
three
four
five
six
seven
eight
nine
colon
semicolon
less
equal
greater
question
at
A-Z
bracketleft
backslash
bracketright
asciicircum
MacStandard
unused
space
exclam
quotedbl
numbersign
dollar
percent
ampersand
quotesingle
parenleft
parenright
asterisk
plus
comma
hyphen
period
slash
zero
one
two
three
four
five
six
seven
eight
nine
colon
semicolon
less
equal
greater
question
at
A-Z
bracketleft
backslash
bracketright
asciicircum
WindowsANSI
underscore
grave
a-z
braceleft
bar
braceright
asciitilde
unused
unused
unused
quotesinglbase
florin
quotedblbase
ellipsis
dagger
daggerdbl
circumflex
perthousand
Scaron
guilsinglleft
OE
unused
unused
unused
unused
quoteleft
quoteright
quotedblleft
quotedblright
bullet
endash
emdash
tilde
trademark
scaron
guilsinglright
oe
unused
unused
ISOLatin1
underscore
quoteleft
a-z
braceleft
bar
braceright
asciitilde
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
unused
dotlessi
grave
acute
circumflex
tilde
macron
breve
dotaccent
dieresis
unused
ring
cedilla
unused
hungarumlaut
ogonek
MacStandard
underscore
grave
a-z
braceleft
bar
braceright
asciitilde
unused
Adieresis
Aring
Ccedilla
Eacute
Ntilde
Odieresis
Udieresis
aacute
agrave
acircumflex
adieresis
atilde
aring
ccedilla
eacute
egrave
ecircumflex
edieresis
iacute
igrave
icircumflex
idieresis
ntilde
oacute
ograve
ocircumflex
odieresis
otilde
uacute
ugrave
ucircumflex
(9 Feb 1996)
Code
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
Code
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
WindowsANSI
Ydieresis
spacea
exclamdown
cent
sterling
currency
yen
brokenbar
section
dieresis
copyright
ordfeminine
guillemotleft
logicalnot
hyphenb
registered
macron
degree
plusminus
twosuperior
threesuperior
acute
mu
paragraph
periodcentered
cedilla
onesuperior
ordmasculine
guillemotright
onequarter
onehalf
threequarters
questiondown
Agrave
Aacute
Acircumflex
Atilde
Adieresis
Aring
AE
Ccedilla
Egrave
Eacute
Ecircumflex
Edieresis
Igrave
Iacute
Icircumflex
Idieresis
Eth
Ntilde
Ograve
ISOLatin1
caron
space
exclamdown
cent
sterling
currency
yen
brokenbar
section
dieresis
copyright
ordfeminine
guillemotleft
logicalnot
hyphen
registered
macron
degree
plusminus
twosuperior
threesuperior
acute
mu
paragraph
periodcentered
cedilla
onesuperior
ordmasculine
guillemotright
onequarter
onehalf
threequarters
questiondown
Agrave
Aacute
Acircumflex
Atilde
Adieresis
Aring
AE
Ccedilla
Egrave
Eacute
Ecircumflex
Edieresis
Igrave
Iacute
Icircumflex
Idieresis
Eth
Ntilde
Ograve
MacStandard
udieresis
dagger
degree
cent
sterling
section
bullet
paragraph
germandbls
registered
copyright
trademark
acute
dieresis
notequal
AE
Oslash
infinity
plusminus
lessequal
greaterequal
yen
mu
partialdiff
summation
product
pi
integral
ordfeminine
ordmasculine
Omega
ae
oslash
questiondown
exclamdown
logicalnot
radical
florin
approxequal
Delta
guillemotleft
guillemotright
ellipsis
space
Agrave
Atilde
Otilde
OE
oe
endash
emdash
quotedblleft
WindowsANSI
Oacute
Ocircumflex
Otilde
Odieresis
multiply
Oslash
Ugrave
Uacute
Ucircumflex
Udieresis
Yacute
Thorn
germandbls
agrave
aacute
acircumflex
atilde
adieresis
aring
ae
ccedilla
egrave
eacute
ecircumflex
edieresis
igrave
iacute
icircumflex
idieresis
eth
ntilde
ograve
oacute
ocircumflex
otilde
odieresis
divide
oslash
ugrave
uacute
ucircumflex
udieresis
yacute
thorn
ydieresis
ISOLatin1
Oacute
Ocircumflex
Otilde
Odieresis
multiply
Oslash
Ugrave
Uacute
Ucircumflex
Udieresis
Yacute
Thorn
germandbls
agrave
aacute
acircumflex
atilde
adieresis
aring
ae
ccedilla
egrave
eacute
ecircumflex
edieresis
igrave
iacute
icircumflex
idieresis
eth
ntilde
ograve
oacute
ocircumflex
otilde
odieresis
divide
oslash
ugrave
uacute
ucircumflex
udieresis
yacute
thorn
ydieresis
MacStandard
quotedblright
quoteleft
quoteright
divide
lozenge
ydieresis
Ydieresis
fraction
currency
guilsinglleft
guilsinglright
fi
fl
daggerdbl
periodcentered
quotesinglbase
quotedblbase
perthousand
Acircumflex
Ecircumflex
Aacute
Edieresis
Egrave
Iacute
Icircumflex
Idieresis
Igrave
Oacute
Ocircumflex
apple
Ograve
Uacute
Ucircumflex
Ugrave
dotlessi
circumflex
tilde
macron
breve
dotaccent
ring
cedilla
hungarumlaut
ogonek
caron
201
C.2
202
ANSI
39
45
96
130
131
132
133
134
135
136
137
138
139
140
145
146
147
148
149
150
151
152
153
154
155
156
159
160
161
164
165
166
167
168
170
171
172
Mac
same
same
same
226
196
227
201
160
224
246
228
n/a
220
206
212
213
210
211
165
208
209
247
170
n/a
221
207
217
32
193
219
180
n/a
164
172
187
199
194
ISOLatin1
n/a
173
145
n/a
n/a
n/a
n/a
n/a
n/a
147
n/a
n/a
n/a
n/a
96
39
n/a
n/a
n/a
n/a
n/a
148
n/a
n/a
n/a
n/a
n/a
same
same
same
same
same
same
same
same
same
same
ANSI
173
174
175
176
178
179
180
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
Mac
45
168
248
161
n/a
n/a
171
166
225
252
n/a
188
200
n/a
n/a
n/a
192
203
231
229
204
128
129
174
130
233
131
230
232
237
234
235
236
n/a
132
241
238
ISOLatin1
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
(9 Feb 1996)
ANSI
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
Mac
239
205
133
n/a
175
244
242
243
134
n/a
n/a
167
136
135
137
139
138
140
190
141
143
142
144
145
147
146
148
149
n/a
150
152
151
153
155
154
214
191
157
156
158
159
n/a
n/a
216
ISOLatin1
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
203
C.3
Character Name
hyphen
grave
Adieresis
Aring
Ccedilla
Eacute
Ntilde
Odieresis
Udieresis
aacute
agrave
acircumflex
adieresis
atilde
aring
ccedilla
eacute
egrave
ecircumflex
edieresis
iacute
igrave
icircumflex
idieresis
ntilde
oacute
ograve
ocircumflex
odieresis
otilde
uacute
ugrave
ucircumflex
udieresis
dagger
degree
section
Character Name
bullet
paragraph
germandbls
registered
trademark
acute
dieresis
notequal
AE
Oslash
infinity
lessequal
greaterequal
yen
partialdiff
summation
product
pi
integral
ordfeminine
ordmasculine
Omega
ae
oslash
questiondown
exclamdown
logicalnot
radical
florin
approxequal
Delta
guillemotleft
guillemotright
ellipsis
space
Agrave
Atilde
204
Mac
45
96
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
164
ANSI
same
same
196
197
199
201
209
214
220
225
224
226
228
227
229
231
233
232
234
235
237
236
238
239
241
243
242
244
246
245
250
249
251
252
134
176
167
ISOLatin1
173
145
196
197
199
201
209
214
220
225
224
226
228
227
229
231
233
232
234
235
237
236
238
239
241
243
242
244
246
245
250
249
251
252
n/a
176
167
Mac
165
166
167
168
170
171
172
173
174
175
176
178
179
180
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
ANSI
149
182
223
174
153
180
168
n/a
198
216
n/a
n/a
n/a
165
n/a
n/a
n/a
n/a
n/a
170
186
n/a
230
248
191
161
172
n/a
131
n/a
n/a
171
187
133
32
192
195
ISOLatin1
n/a
182
223
174
n/a
146
152
n/a
198
216
n/a
n/a
n/a
165
n/a
n/a
n/a
n/a
n/a
170
186
n/a
230
248
191
161
172
n/a
n/a
n/a
n/a
171
187
n/a
32
192
195
(9 Feb 1996)
Character Name
Otilde
OE
oe
endash
emdash
quotedblleft
quotedblright
quoteleft
quoteright
divide
lozenge
ydieresis
Ydieresis
fraction
currency
guilsinglleft
guilsinglright
fi
fl
daggerdbl
periodcentered
quotesinglbase
quotedblbase
perthousand
Acircumflex
Ecircumflex
Aacute
Edieresis
Egrave
Iacute
Icircumflex
Idieresis
Igrave
Oacute
Ocircumflex
apple
Ograve
Uacute
Ucircumflex
Ugrave
dotlessi
circumflex
tilde
macron
breve
dotaccent
Character Name
ring
cedilla
hungarumlaut
ogonek
caron
Mac
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
ANSI
213
140
156
150
151
147
148
145
146
247
n/a
255
159
n/a
164
139
155
n/a
n/a
135
183
130
132
137
194
202
193
203
200
205
206
207
204
211
212
n/a
210
218
219
217
n/a
n/a
152
175
n/a
n/a
ISOLatin1
213
n/a
n/a
n/a
n/a
n/a
n/a
96
39
247
n/a
255
n/a
n/a
164
n/a
n/a
n/a
n/a
n/a
183
n/a
n/a
n/a
194
202
193
203
200
205
206
207
204
211
212
n/a
210
218
219
217
144
147
148
149
150
151
Mac
251
252
253
254
255
ANSI
n/a
184
n/a
n/a
n/a
ISOLatin1
154
155
157
158
159
205
C.4
Character Name
quoteright
quoteleft
dotlessi
grave
acute
circumflex
tilde
macron
breve
dotaccent
dieresis
ring
cedilla
hungarumlaut
ogonek
caron
space
exclamdown
currency
yen
brokenbar
section
dieresis
ordfeminine
guillemotleft
logicalnot
hyphen
registered
macron
degree
twosuperior
threesuperior
acute
paragraph
periodcentered
cedilla
206
ISOLatin1
39
96
144
145
146
147
148
149
150
151
152
154
155
157
158
159
160
161
164
165
166
167
168
170
171
172
173
174
175
176
178
179
180
182
183
184
ANSI
146
145
n/a
96
180
n/a
152
175
n/a
n/a
168
n/a
n/a
n/a
n/a
n/a
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
Mac
213
212
245
96
171
246
247
248
249
250
172
251
252
253
254
255
32
193
219
180
n/a
164
172
187
199
194
45
168
248
161
n/a
n/a
171
166
225
252
Character Name
onesuperior
ordmasculine
guillemotright
onequarter
onehalf
threequarters
questiondown
Agrave
Aacute
Acircumflex
Atilde
Adieresis
Aring
AE
Ccedilla
Egrave
Eacute
Ecircumflex
Edieresis
Igrave
Iacute
Icircumflex
Idieresis
Eth
Ntilde
Ograve
Oacute
Ocircumflex
Otilde
Odieresis
multiply
Oslash
Ugrave
Uacute
Ucircumflex
Udieresis
ISOLatin1
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
ANSI
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
Mac
n/a
188
200
n/a
n/a
n/a
192
203
231
229
204
128
129
174
130
233
131
230
232
237
234
235
236
n/a
132
241
238
239
205
133
n/a
175
244
242
243
134
(9 Feb 1996)
Character Name
Yacute
Thorn
germandbls
agrave
aacute
acircumflex
atilde
adieresis
aring
ae
ccedilla
egrave
eacute
ecircumflex
edieresis
igrave
iacute
icircumflex
idieresis
eth
ntilde
ograve
oacute
ocircumflex
otilde
odieresis
divide
oslash
ugrave
uacute
ucircumflex
udieresis
yacute
thorn
ydieresis
ISOLatin1
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
ANSI
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
same
Mac
n/a
n/a
167
136
135
137
139
138
140
190
141
143
142
144
145
147
146
148
149
n/a
150
152
151
153
155
154
214
191
157
156
158
159
n/a
n/a
216
207
208
(9 Feb 1996)
The first column of Table D.1 contains the formal, legal name of device manufacturers who support Adobe PostScript in their devices.
The second column of Table D.1 contains a list of two-letter prefixes that
have been assigned to device manufacturers. The manufacturers assigned
prefix composes the first two characters of an initial PPD file name, the first
two characters of *PCFileName, and the first two characters after the asterisk of
any main keywords created by the manufacturer. Each manufacturer must
have a unique prefix and the prefix must be the same in all PPD files for
devices from that manufacturer. For example, all PPD files built for Agfa
devices will have filenames and *PCFileName values that start with the character sequence AG, and any main keywords created by Agfa will start with
the character sequence *AG, as in *AGHalftone. See *PCFileName in section 5.3 for
advice on naming PPD files. See section 5.1 for information about creating
and properly prefixing keywords.
The third column of Table D.1 contains the value of *Manufacturer (see section
5.3), if known. The fourth column of Table D.1 contains the value of the tag
icHeader.manufacturer in ICC color characterization profiles belonging to this
manufacturer in the Windows environment, if known.
Note
Because the *Manufacturer keyword is new in the 4.3 version of this specification, very few *Manufacturer strings and icHeader.manufacturer profile tags are
known at this time. By the time the next version of this specification is
released, this table will be much more complete.
Note
209
Company Name
Prefix
*Manufacturer
icHeader.manufacturer
3M Corporation
3M
AD
Adobe
ADOB
AG
AP
Apple
APPL
AS
AST
AST
AU
Barco Graphics
BC
BG
BU
Bull
BULL
Cactus
CC
CalComp, Inc.
CA
Canon, Inc.
CN
Canon
CANO
Colorbus Software
CB
CG
CP
Compaq
COMP
CF
DS
Dataproducts Corporation
DP
Dataproducts
DATA
DC
KD
Kodak
KODA
EG
DU
EF
FE
210
(9 Feb 1996)
Table D.1 Assigned prefixes and *Manufacturer strings as of February 9, 1996 (Continued)
Company Name
Prefix
*Manufacturer
icHeader.manufacturer
Fujitsu, Inc.
FU
Fuji Film
FF
Fuji Xerox
FX
GCC Technologies
GC
GS
HP
HP
HP
HK
IDT
ID
Indigo
IN
IC
IB
IBM
IBM
Lasergraphics
LG
Lexmark International
LX
Lexmark
LEXM
Lincoln, A.J.
LI
Linotype-Hell AG
LH
Management Graphics
MG
SC
Mannesmann
MANN
MT
ME
MO
NC
NEC
NEC
ND
Newgen Corporation
NW
NX
NP
OC
Oce
OCE
OE
211
Table D.1 Assigned prefixes and *Manufacturer strings as of February 9, 1996 (Continued)
Company Name
Prefix
*Manufacturer
icHeader.manufacturer
OK
Oki
OKI
OP
Panasonic USA
PA
Panasonic
PANA
PX
PP
QMS, Inc.
QM
QMS
QMS
Radius
RA
RI
Ricoh
RICO
SX
EP
Epson
EPSO
SK
Seiko
SEIK
Silicon Graphics
SG
Sony Corporation
SO
SN
SM
Tektronix
TK
Tektronix
TEKT
TI
TI
TI
TO
Unisys
UN
Ultimate Technographics
UT
VT
VS
VE
WA
Wang
WANG
Xante Corporation
XT
Xerox Corporation
XR
Xerox
XERO
212
(9 Feb 1996)
E.1
*1284Modes
*CloseSubGroup
*DefaultExitJamRecovery
*DefaultHalftoneType
*DefaultUseHWMargins
*ExitJamRecovery
*FCacheSize
*FDirSize
*?InstalledMemory
*LeadingEdge
*NonUIConstraints
*OpenSubGroup
*QueryOrderDependency
*ReferencePunch
*SuggestedManualFeedTimeout
213
214
(9 Feb 1996)
215
216
(9 Feb 1996)
page. Executing such code will affect the appearance of future imaging,
but will not affect imaging already done.. This left only the statement that
non-ordered fragments should be emitted after ordered fragments.
Structure Keywords: *OpenGroup/*CloseGroup may not be nested; the new
keywords *OpenSubGroup/*CloseSubGroup should be used for nesting groups
within groups. Removed requirement that main keywords surround by
*OpenUI/*CloseUI be documented in the PPD spec, as OEMs can invent their
own main keywords. Added reference to *JCLOpenUI/*JCLCloseUI. In
*Resolution example at end of *OrderDependency description, changed 2504 to
2504dpi. Rewrote entire section to be less verbose.
Symbolic References to Data: Removed unnecessary titles on examples in
description of *SymbolValue.
Media Option Keywords: Removed lists of mediaOptions to Appendix B.
Added explanation of how Transverse qualifier should and should not be
used. Added explanations for other common qualifiers and page size substrings.
Custom Page Sizes: Made substantial changes to how custom page sizes
are handled on cut-sheet devices. Orientation, WidthOffset, and HeightOffset are
now allowed. All parameters are now defined the same for roll-fed & cutsheet media. Orientation can now be used with *HWMargins to figure out
which edge is leading into the device, so the imageable area can now be
more accurately determined by subtracting the correct values of *HWMargins
from the correct edges of the page. Added section for print manager
authors on how to handle custom page sizes. All complete examples of
custom page size entries were moved to section 6.4. The keyword
*VariablePaperSize was removed from the specification, as it was superceded
by *CustomPageSize in version 4.0.
Media Handling Features, *InputSlot: Added Microsoft #defines for input
slots to list of inputSlotOptions. Removed LargeFormat as an inputSlotOption
because it duplicated the function of AnyLargeFormat and was not used in
any existing PPD files. Added note to *InputSlot about combining functionality such as *MediaType and *ManualFeed with *InputSlot. Added example of
*InputSlot entry for single-slot or roll-fed devices.
Media Handling Features: Removed OnlyOne as an option for *OutputBin, as
this keyword should be omitted if there is only one output bin. Rewrote
*RequiresPageRegion to clarify that *PageRegion code may be required for reasons other than input slots not sensing page size. Added note to *DefaultOutputBin; it should not be present without *OutputBin. To *DefaultOutputOrder,
added that if this keyword is stand-alone, its value may not be Unknown.
217
218
(9 Feb 1996)
E.2
*SuggestedJobTimeout
*ResScreenFreq
*SuggestedWaitTimeout
*InstalledMemory
219
the user interface are invoked. Replaced with description of how some
print managers behave regarding defaults. Removed similar statement dictating print manager behavior from last paragraph of section 2.6.
Section 5.9: Under Folio page size, changed incorrect reference to 8.5x13
page to correct metric size of 210mm x 330mm. Changed point size of
page from [595 936] to [595 935] for greater accuracy. Changed imageable area description to approximate. Removed references to folio
sheet and quarto sheet (under the definition of Quarto page size).
Section 5.14: Fixed typo F* at beginning of several keywords.
Appendix A: Removed *AccurateScreensSupport from the list, as it was never
an *OpenUI keyword. Added *InstalledMemory.
E.3
*LanguageEncoding
*?ColorModel
*JCLCloseUI
*JCLEnd
*?JCLFrameBufferSize
*?JCLResolution
*?CurrentMediaHeight
*ShortNickName
*DefaultColorModel
*JCLToPSInterpreter
*DefaultJCLFrameBufferSize
*DefaultJCLResolution
Substantially rewrote section 5.12, Custom Page Sizes, to define the meaning of custom page sizes on cut-sheet devices (old version dealt only with
roll-fed devices). Added definitions for cut-sheet devices to the custom
page size parameters and to all relevant keywords. Divided roll-fed and
cut-sheet devices into two subsections, wrote new introduction to cover
both sections. Clarified portions of *HWMargins and added info about how to
use it. Added new illustrations and examples. Changed *MaxMediaWidth
from int to real. Added explanation to *CurrentMediaWidth.
Added new section 5.23, Features Accessible Only Through Job Control
Language, to document new *JCL keywords.
220
(9 Feb 1996)
E.4
221
222
(9 Feb 1996)
223
U
UII
Keywords: Rearranged all keywords into more logical sections and order.
Removed all option keywords from end of document and integrated them
into their respective main keyword sections. Added UI symbol (shown
here) throughout document to mark keywords that should be bracketed
with *OpenUI/*CloseUI.
New Keywords
224
*AdvanceMedia
*BindColor
*BindEdge
*BindType
*BindWhen
*BitsPerPixel
*BlackSubstitution
*Booklet
*Collate
*CutMedia
*Duplex
*FoldType
*FoldWhen
*InsertSheet
*Jog
*MediaColor
*MediaType
*MediaWeight
*MirrorPrint
*NegativePrint
*OutputMode
*Separations
*Signature
*Slipsheet
*Smoothing
*Sorter
*StapleLocation
*StapleOrientation
*StapleWhen
*StapleX
*StapleY
*TraySwitch
*?AdvanceMedia
*?BindColor
*?BindEdge
*?BindType
*?BindWhen
*?BitsPerPixel
*?BlackSubstitution
*?Booklet
*?Collate
*?CutMedia
*?Duplex
*?FoldType
*?FoldWhen
*?InsertSheet
*?Jog
*?MediaColor
*?MediaType
*?MediaWeight
*?MirrorPrint
*?NegativePrint
*?OutputMode
*?Separations
*?Signature
*?Slipsheet
*?Smoothing
*?Sorter
*?StapleLocation
*?StapleOrientation
*?StapleWhen
*?StapleX
*?StapleY
*?TraySwitch
*DefaultAdvanceMedia
*DefaultBindColor
*DefaultBindEdge
*DefaultBindType
*DefaultBindWhen
*DefaultBitsPerPixel
*DefaultBlackSubstitution
*DefaultBooklet
*DefaultCollate
*DefaultCutMedia
*DefaultDuplex
*DefaultFoldType
*DefaultFoldWhen
*DefaultInsertSheet
*DefaultJog
*DefaultMediaColor
*DefaultMediaType
*DefaultMediaWeight
*DefaultMirrorPrint
*DefaultNegativePrint
*DefaultOutputMode
*DefaultSeparations
*DefaultSignature
*DefaultSlipsheet
*DefaultSmoothing
*DefaultSorter
*DefaultStapleLocation
*DefaultStapleOrientation
*DefaultStapleWhen
*DefaultStapleX
*DefaultStapleY
*DefaultTraySwitch
*OpenUI
*OpenGroup
*StartEmulator_
*FaxSupport
*CustomPageSize
*MaxMediaWidth
*Resolution
*CloseUI
*CloseGroup
*StopEmulator_
*JobPatchFile
*ParamCustomPageSize
*CenterRegistered
*HWMargins
*Extensions
*Protocols
*Emulators
*?PatchFile
*?CurrentMediaWidth
*PageStackOrder
*LandscapeOrientation
(9 Feb 1996)
*ColorRenderDict
*DefaultColorSpace
*RequiresPageRegion
*OrderDependency
*LanguageLevel
*UIConstraints
*PCFileName
*ModelName
*AccurateScreensSupport
The changes to the syntax and semantics of actual keywords from version 3.0
are as follows:
*Include: The filename must now be enclosed in double quotes.
*ImageableArea, *?ImageableArea: The numbers in the value (and the numbers
returned by the query) are now real numbers; previously, they were integers.
*DefaultResolution, *?Resolution, *SetResolution: These can now take an option of
the form 300x600dpi. Previously, the only format was 300dpi. This change is
necessary to accommodate printers with anamorphic resolution.
*Font: Two more fields were added to the value to describe the character set
of the font and whether the font is removable or not.
*PaperTray, *?PaperTray, and *DefaultPaperTray were removed, as their code had
always been redundant with *PageSize and no tools were found to depend
upon their presence.
*Collator, *?Collator, *DefaultCollator: These were changed to *Collate, *?Collate,
and *DefaultCollate, since they had not previously been used in PPD files and
this brought them more in line with other keyword usage.
Changes to Descriptions of Existing Keywords
225
the capacity for a file system; example was added for a device that has the
capacity but does not have a file system installed; reemphasized that this
entry should be omitted if there is no capacity for having a file system.
Clarified meaning of return values of *?FileSystem. Moved *Throughput to this
section.
Keywords: Added new section Structure Keywords. Moved *Include and *End
to this section. Moved information on device resolution to new section
Resolution and Appearance Control.
Introduction to Media Handling: New section created from Paper
Handling. Significantly rewritten. Added setpagedevice to the list of example invocations.
Media Option Keywords: New section, created from several old sections.
Significantly rewritten. Added info about the extensibility of media option
keywords. PaperKeyword became mediaOption throughout the document.
Refined explanation of how to handle Envelopes. Explained parsing for
*OpenUI/*CloseUI rather than a specific list of options. Clarified meaning of
Transverse (long edge perpendicular to feed direction).
Media Option Keywords: Rewrote all dimensions in consistent format.
Built tables of ISO and JIS standard paper and envelope sizes and added
most sizes. Moved most U.S. standard definitions to a separate table,
except for the ones that needed extra text to explain them, and included
several new media sizes. Changed imageable area definition of A4Small
from inches to points (all others were already in points). Changed imageable area of LetterSmall from 553x731.5 points to 552x730 points, because
that is what 8 out of 9 PPD files had for that imageable area.
Paper Size Invocation became Media Selection Under *DefaultPageSize,
Unknown is now an option. Clarified, with examples, how *PageSize is meant
to be used. Explained how *PageRegion should be used. Removed *PaperTray
and associated default and query.
Information About Media Sizes: Under *DefaultImageableArea and *DefaultPaperDimension, the sentence The value should always be Letter. was
removed. This value may be Unknown or one of the media options listed
under *ImageableArea/*PaperDimension. was added. For *ImageableArea, clarified that imageable area was measured in PostScript default units.
Changed integers to reals for all imageable area and paper dimension
keywords. Added that x and y axes should correspond in *ImageableArea and
*PaperDimension.
Media Handling Features: For the *InputSlot keywords, the list of options
was replaced by trayOption and explanation was added. Current options
were brought forward from the rear of the document. In the definition of
*ManualFeed the value None was removed from the list of valid choices and
226
(9 Feb 1996)
227
228
(9 Feb 1996)
Index
Symbols
* (first character of main keywords,
PPD files) 15
*% (comment characters in PPD files)
28
*? (first characters of query keywords,
PPD files) 15
/ (translation string marker in PPD
files) 26
^ (caret, marks a symbol name) 149
| (exclusive OR) 32
Numerics
*1284DeviceID 72
*1284Modes 71
A
Accept68K (*TTRasterizer) 70
*AccurateScreensSupport 87
*?AdvanceMedia 134
*AdvanceMedia 134
anti-aliasing 86
AnySetup (*OrderDependency) 49
ASCII characters
definition of commonly used 2
in main keywords 16
range allowed in PPD file 4
B
basic device capabilities keywords
6872
BCP (*Protocols) 78
C
Cassette (*InputSlot) 97
*CenterRegistered 111
229
clear channel
needed for BCP 78
needed for emulators 80
clipping path (*ImageableArea) 102
*CloseGroup 45
*CloseSubGroup 46
*CloseUI 42
CMap
used as encoding value of *Font
138
*?Collate 123
*Collate 123
colon, in PPD files 20
color issues in PPD files 9195
black substitution 91
color depths, invoking 87
color matching 146
color rendering dictionaries 92
color separation keywords 146149
custom color 148
option keywords defined 146
process color 146
*ColorDevice 68
*?ColorModel 92
*ColorModel 92
*ColorRenderDict 92
colorsepkey option keyword 147
*ColorSepScreenAngle 148
*ColorSepScreenFreq 148
*ColorSepScreenProc 148
*ColorSepTransfer 148
Comm10
230
Index
*CustomPageSize 109
and *NonUIOrderDependency
48
examples 166175
parameters defined 108
relationship to
*ParamCustomPageSize 110
*?CutMedia 135
*CutMedia 135
cut-sheet media
example of custom page size entry
173, 175
keywords defined for custom page
sizes 113
D
*Default
example of format 16
in InstallableOptions entry 65, 68
in local customization files 67
prefix 15
summary of rules 40
translation string allowed 26
use of value False 38
use of value None 39
use of value True 38
use of value Unknown 39
valid values 24
default keywords in PPD files
*Default syntax 15
definition 3
summary of rules 40
using and changing default settings
14
default state of the device 6
*DefaultAdvanceMedia 134
*DefaultBindColor 130
*DefaultBindEdge 129
*DefaultBindType 130
*DefaultBindWhen 130
*DefaultBitsPerPixel 87
*DefaultBlackSubstitution 91
*DefaultBooklet 131
*DefaultCollate 123
*DefaultColorModel 92
*DefaultColorSep 148
*DefaultColorSpace 68
*DefaultCutMedia 135
*DefaultDuplex 122
*DefaultExitJamRecovery 76
*DefaultFoldType 123
*DefaultFoldWhen 124
*DefaultFont 141
*DefaultHalftoneType 88
*DefaultImageableArea 102
*DefaultInputSlot 97
*DefaultInsertSheet 132
*DefaultInstalledMemory 74
*DefaultJCLFrameBufferSize 82
*DefaultJCLResolution 83
*DefaultJog 133
*DefaultLeadingEdge 112
example 168
*DefaultManualFeed 99
*DefaultMediaType 101
*DefaultMediaWeight 101
*DefaultMirrorPrint 134
*DefaultNegativePrint 134
*DefaultOutputBin 119
*DefaultOutputMode 122
*DefaultOutputOrder 120
*DefaultPageRegion 100
*DefaultPageSize 99
*DefaultPaperDimension 103
*DefaultPaperTray keyword removed
225
*DefaultResolution 84
*DefaultScreenProc 88
*DefaultSeparations 149
*DefaultSignature 121
*DefaultSlipsheet 132
*DefaultSmoothing 86
*DefaultSorter 125
*DefaultStapleLocation 125
*DefaultStapleOrientation 128
*DefaultStapleWhen 128
*DefaultStapleX 126
*DefaultStapleY 127
*DefaultTransfer 90
*DefaultTraySwitch 121
*DefaultUseHWMargins 115
device, definition of 1
*DeviceAdjustMatrix 78
Disk
status value of *Font 140
(7 Dec 1995)
E
elementary types of a PPD file 36
*Emulators 79
emulators and protocols keywords
7880
encoding
*LanguageEncoding option 57
encoding
value of *Font 137
*End 29, 55
Env
envelopes
requesting unnamed sizes 184
error handling, in PPD files 9
EUC (font encoding option) 137
Executive page size variations 184
exiting the server loop, PPD keywords
marked 33
*?ExitJamRecovery 76
*ExitJamRecovery 76
*ExitServer 76
ExitServer (*OrderDependency) 49
Expert
F, G
Factory transfer function 91
False, defined 38
*FaxSupport 69
*FCacheSize 136
*FDirSize 136
HeightOffset
Forced
*LeadingEdge option defined
112
example 167
foreign language translation 2528,
180
format of PPD files 1531
*FormatVersion 56
*FreeVM 73
relationship to *VMOption 74
globaldict , assumptions in PPD files
29
gray levels and halftoning 8791
transfer functions 91
*?ImageableArea 103
*ImageableArea 102
H
halftone screen
angle, frequency, spot function
components 88
list of spot options 89
order of invocation 11
*HalftoneName 94
hard disk, presence listed 69
HeadToToe duplex printing 122
Height (custom page size parameter)
defined 108
example 166
use 96
imagesetter features 133136
ImageShift in *CustomPageSize
code 174
*Include 25, 55
example 13
use with *SymbolValue 152
informational main keywords,
definition 4
*InkName 149
*?InputSlot 97
*InputSlot 97
combined with *MediaType 98
use by print managers 100
in-range byte codes 4
*?InsertSheet 132
*InsertSheet 132
installable options (PPD file group)
6568
InstallableOptions
and *InstalledMemory 75
Index
231
57
ISOLatin5 (*LanguageEncoding)
57
J, K
JCL keywords
and *Procotols 79
defined 81
JCL, elementary type defined 37
*JCLBegin 81
*JCLCloseUI 82
*JCLEnd 81
*?JCLFrameBufferSize 82
*JCLFrameBufferSize 82
*JCLOpenUI 82
*?JCLResolution 83
*JCLResolution 83
JCLSetup (*OrderDependency) 49
*JCLToPSInterpreter 81
JIS
57
job control language keywords 81
*JobPatchFile 73
*?Jog 133
*Jog 133
Kanji PPD files 179
keywords in PPD files 41152
L
landscape orientation, relationship to
Transverse 185
*LandscapeOrientation 104
language extensions, support in PPD
files 68
232
Index
*LanguageEncoding 56
example 166
option defined 112
Lower (*InputSlot) 97
Lower (*OutputBin) 120
M
MacStandard
*LanguageEncoding value 57
*ManualFeed 99
*Manufacturer 58
174
*MaxMediaHeight 111
example 166
*MaxMediaWidth 111
example 166
MaxPage page size name 185
105
*?MirrorPrint 134
*MirrorPrint 134
*ModelName 59
same as *NickName 60
(7 Dec 1995)
Orientation
*?NegativePrint 134
*NegativePrint 134
*NickName 60
relation to *ShortNickName 64
use of 64
None
O
OldStandard
P
*PageDeviceName 94
PageOffset in *CustomPageSize
*OpenUI
*PageRegion 100
defined 42
in local customization file 13
list of UI keywords 181
UI symbol in spec 33
*Option, in InstallableOptions entry
66
option keywords in PPD files 1720
ASCII characters 19
capitalization conventions 183
case 19, 42
creating your own 42
definition 3
forbidden characters 18
length limit 19
parsing 19
qualifier 18
serialization 18
option, elementary type defined 37
optional features, handling in PPD
files 65
order dependency in PPD files 10
*OrderDependency 10, 48
*PatchFile 72
*PCFileName 61
105
PostScript language sequences in PPD
files 28
Level 2 vs Level 1 29
PostScript printer description files.
See PPD files
PPD file format specification
changes from earlier versions 213
PPD files
local customization (PPD) file
naming 13
post-processing 8
*PPD-Adobe 42
PreferLong (*LeadingEdge) 112
example 167
print manager, defined in PPD spec 6
printable 7-bit ASCII. See byte codes
printer messages in PPD files 143
146
*PrinterError 143
*PrintPSErrors 77
*Product 62
Prolog (*OrderDependency) 49
*Protocols 78, 80
*PSVersion 62
Q
qualifier
defined 18
for mediaOption keywords 184
query keywords in PPD files
definition 3
query, elementary type defined 37
querying the device via a PPD file 5
*QueryOrderDependency 51
QuotedValue 20, 21
R
real, elementary type defined 37
Rear (*InputSlot) 97
Rear (*OutputBin) 120
*ReferencePunch 135
Index
233
*RenderingIntent 93
repeated keywords 14, 182
required keywords
handling missing 9
in local customization file 16
list of 41
order of appearance 31
*RequiresPageRegion 103
*Reset 76
*?Resolution 86
*Resolution 85
resolution
enhancement 86
resolution and appearance control
8487
*ResScreenAngle 89
*ResScreenFreq 89
Reverse, output order defined 120
RKSJ (font encoding option) 137
roll-fed media
example of custom page size entry,
Level 1 168, 169
example of custom page size entry,
Level 2 171, 172
ROM
status value of *Font 140
Rotated in page size name 185
S
sample of spec format 34
sample PPD files 153175
custom page size examples 166
Level 2 Color Printer 153
Level 2 Imagesetter 160
*ScreenAngle 88
*ScreenFreq 88
*ScreenProc 89
*?Separations 149
*Separations 149
serialization qualifier
for media size, defined 184
*SetResolution 85
Shift-JIS (font encoding option) 137
Short (*LeadingEdge) 112
example 166
*ShortNickName 64
relationship to *NickName 60
*?Signature 121
*Signature 121
simplex (one-sided) printing 122
234
Index
Standard
status
value of *Font 140
*StopEmulator_emulatorOption 80
string, elementary type defined 38
StringValue 20, 23
structure keywords (PPD files) 42
55
structure of PPD files 31
*SuggestedJobTimeout 77
*SuggestedManualFeedTimeout 77
*SuggestedWaitTimeout 77
summary of PPD file contents 176
*SymbolEnd 152
use with *SymbolLength 150
T
tagged binary communications
protocol 79
TBCP (*Protocols) 79
*Throughput 70
*Transfer 90
translation strings
defined 25
on *Default keywords 26
on query keywords, not allowed
37
on related keywords 26, 96
parsing rules 27
rules 26
syntax in PPD files 2528
transverse
as used on roll-fed devices 112
common use by print managers
113
Transverse mediaOption qualifier
definition 185
usage advice 177
*?TraySwitch 121
*TraySwitch 121
True, defined 38
TrueImage (*TTRasterizer) 70
*?TTRasterizer 71
*TTRasterizer 70
tuples, defined in PPD files 16
two-sided printing 122
Type42 (*TTRasterizer) 70
(7 Dec 1995)
WindowsANSI
*LanguageEncoding value 57
113
generic option/value defined 39
use with *LeadingEdge 167
unsetting a feature in PPD files 8
Upper (*InputSlot) 97
Upper (*OutputBin) 120
*UseHWMargins 115
example of *NonUIConstraints
167
use by print manager 117, 118
when to omit 175
user interface
building from a PPD file 5, 6
user-defined page sizes in PPD files
106
userdict, assumption in PPD files 29
using PPD files 514
V
*VariablePaperSize keyword
removed 217
version
value of *Font 138
*VMOption 74
W, X, Y, Z
Width
Index
235
236
Index
(7 Dec 1995)