CONTENTS | PREV | NEXT
The javax.print.attribute.standard
package enumerates all of the standard attributes in the Java Print
Service API. Most of these standard attributes are taken from the
attributes defined in the IETF Internet Printing Protocol (IPP) 1.1
specification. This means that each IPP-compliant attribute
class(category) defined in package javax.print.attribute.standard
corresponds to an IPP attribute category, and the name (as returned
by getName) is the actual IPP name for the category. The class
names also usually reflect the IPP name as closely as the coding
conventions of the Java programming language permit. Furthermore
the values defined for a category are the same as the IPP values.
IPP compatibility of each attribute category is documented in the
API specification.
This section describes the
attributes that developers will probably use most frequently. The
more commonly-used attributes, including the ones listed here,
implement PrintRequestAttribute because printing applications will
usually specify how an entire print job should be printed, which is
the role of a PrintRequestAttribute.
OrientationRequested
The OrientationRequested attribute
category allows you to specify the orientation of the imaging on
the paper. The possible attribute values are: PORTRAIT, LANDSCAPE,
REVERSE_PORTRAIT, and REVERSE_LANDSCAPE.
OrientationRequested.PORTRAIT is usually the default value. This
code snippet demonstrates adding an OrientationRequested attribute
to a set:
aset.add(OrientationRequested.REVERSE_PORTRAIT);
The OrientationRequested object is a
type-safe enumeration encapsulating String values, which correspond
to the possible orientations. These values are the actual IPP
keywords.
Some pre-formatted document types,
such as "Postscript", might not be able to support this attribute
category because pre-formatted document types embed printer
language commands that are interpreted by the printer, and these
commands take precedence over a client request.
Clients can discover the supported
orientation values for a particular print service by calling:
PrintService.getSupportedAttributeValues(OrientationRequested.class, ...).
This method returns an array of type
OrientationRequested enumerating the supported values.
Copies
The Copies attribute category allows
you to specify the number of copies to print. The Copies class
encapsulates an integer representing the number of copies
requested. This code snippet demonstrates adding a Copies
attribute, set to five copies, to an attribute set:
aset.add(Copies(5));
Clients can discover the range of
copies that a print service supports by calling :
PrintService.getSupportedAttributeValues(Copies.class, ...)
This method returns a CopiesSupported
object, which encapsulates a range of integer values representing
the range of copies that the service can handle. Calling
getSupportedAttributeValues with CopiesSupported instead of Copies
always returns null because the CopiesSupported object does not
implement the PrintRequestAttribute interface, and so a client
cannot specify a CopiesSupported attribute in a print request.
This code sample demonstrates
discovering if a print service supports printing 5 copies and
adding a Copies attribute with a value of 5 copies to an attribute
set:
CopiesSupported copSupp =
(CopiesSupported) service.getSupportedAttributeValues(Copies.class, null,
null);
if (copSupp != null && copSupp.contains(5)) {
requestAttrSet.add(new Copies(5));
} else { ...
}
Media
Media is the IPP attribute that
identifies the medium on which to print. The Media attribute is an
important attribute to understand, butis relatively complex.
The Java Print Service API
defines three subclasses of the abstract class Media to reflect the
overloaded Media attribute in the IPP specification: MediaSizeName,
MediaName and MediaTray. All the Media subclasses have the Media
category, for which each subclass defines different standard
attribute values. For example, a MediaTray object can specify a
value of MANUAL for the Media attribute to indicate that the
document must be printed on paper from the printer's manual
tray. This code snippet demonstrates adding a Media attribute to a
set:
aset.add(MediaTray.MANUAL);
The value of the Media attribute
is always a String, but because the attribute is overloaded, its
value determines the type of media to which the attribute refers.
For example, the IPP pre-defined set of attribute values include
the values "a4" and "top-tray". If Media is set to
the value "a4" then the Media attribute refers to the size
of paper, but if Media is set to "top-tray" then the Media
attribute refers to the paper source. Because the String attribute
value can refer to such diverse types of media, an application can
extend the attribute set to include values such as
"company-letterhead" or "yellow letter paper". Of
course, to extend the Media attribute in this way, an application
must discover a print service that is configured to print with this
media.
In most cases, applications will
use either MediaSizeName or MediaTray. The MediaSizeName class
enumerates the media by size. The MediaTray class enumerates the
paper trays on a printer, which usually include a main tray and a
manual feed tray. The IPP 1.1 specification does not provide for
specifying both the media size and the media tray at the same time,
which means, for example, that an application cannot request size
A4 paper from the manual tray. A future revision of the IPP
specification might provide for a way to request more than one type
of media at a time, in which case the JPS API will most likely be
enhanced to implement this change.
The JPS API also includes two
additional media-related Attribute classes that are not IPP
attributes: MediaSize and MediaPrintableArea.
MediaSize
MediaSize is not a request
attribute; it is an enumeration of paper dimensions and a mapping
to MediaSizeName instances. Each MediaSizeName instance usually has
a MediaSize object associated with it so that clients can obtain
the dimensions of the paper that the MediaSizeName instance
defines. To determine the dimensions of the MediaSizeName instance,
call:
MediaSize size = MediaSizeName.getMediaSizeForName(paper);
MediaPrintableArea
MediaPrintableArea is used in a
print request in conjunction with a compatible Media to specify the
area of the paper on which to print. Printer hardware usually
defines the printable area of a page, which is rarely the entire
page. For this reason, an application needs to determine what
printable area a printer defines for a particular size media to
ensure that the print data can fit within this area.
For example, to determine the
supported printable area for 5" x 7" paper, the application needs
to choose a media size attribute value that corresponds to this
size paper and then query the print service with the media
size:
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.NA_5X7);
MediaPrintableArea printableArea =
(MediaPrintableArea)service.
getSupportedAttributeValues(MediaPrintableArea.class, null, aset);
The returned value indicates the
largest printable area that can be supported by that printer for
that paper size.
Destination
The Destination attribute allows you
to redirect your print data to a file rather than sending it to a
printer device. The "print-to-file" option is very common
in user dialogs, but the spooled data is not always usable because
it might be a device-specific raster that can only be interpreted
by the device from which it was redirected. For this reason, the
Java Print Service API requires that the client query the print
service to determine if it can redirect the output to a file. The
service might not support the category at all, or it might support
only particular values. For example, since the JPS API can be used
in an network environment, in which the formatting of print data
does not occur on the host computer, specifying a local file for
output might not be possible because the service formatting the
data might not have access to the local filesystems of the client.
The Destination attribute takes a URL as the value of the
destination, which allows a network printer to use a protocol such
as ftp to upload formatted print data. However, most printers that
support this attribute will run as part of a local environment and
can accept the "file:" protocol URL. This code snippet
redirects the output to a file called out.prn on the c: drive:
aset.add(new Destination("file:c:\out.prn"));
SheetCollate
The SheetCollate attribute allows you
to specify whether or not your print job is collated when you are
printing more than one copy of a multi-page document. For example,
the pages of a 3-page, 2-copy collated job will print as
(1,2,3,1,2,3), but the pages of the same document submitted in a
2-copy uncollated job will be printed as (1,1,2,2,3,3). This
attribute is not in version 1.1 of the IPP specification, but it is
very useful and most printers support it. This code snippet
demonstrates specifying a collated job:
aset.add(SheetCollate.COLLATED);
Sides
Some printers, particularly high-end
printers, can print on both sides of the paper. The Sides attribute
allows applications to specify two-sided printing instead of the
usual default of single-sided printing. Two-sided printing is
sometimes referred to as "duplex" or "tumble" printing. These two
values are differentiated by the orientation of the output. The
Java Print Service API refers to duplex as "two sided long edge"
and tumble as "two sided short edge". Read the API specification
for Sides for further explanation. This code snippet specifiesthat
a job print the documents two-sided:
aset.add(Sides.DUPLEX);
Fidelity
The Fidelity attribute is an IPP
boolean attribute that represents whether or not a print job should
be rejected if the print service does not support any attribute
specified in the print request. Fidelity is not an attribute many
developers will need to consider, but it is an important attribute
in the context of the JPS API. The default value is FIDELITY_FALSE,
which indicates that a print job should not be rejected if the
print service does not support an attribute specified in the print
request. For example, if an application specifies an orientation of
reverse landscape, but the printer does not support reverse
landscape, the job is rejected if fidelity is true, but if fidelity
is false then the printer might substitute a reasonable
alternative, such as the landscape orientation. The Fidelity
attribute allows applications to decide whether to only print the
document exactly as specified or to print it even though the
printer might not support all attributes. This code snippet
specifies that a job should be rejected if the printer does not
support the requested attributes:
aset.add(Fidelity.FIDELITY_TRUE);
For the cases in which fidelity is
important, the Java Print Service API provides many tools for
applications to query exactly what can be supported for a
particular print request. See the various query methods on the
PrintService interface.
CONTENTS | PREV | NEXT