The
javax.print.PrintServiceLookup class included in the Java Print
Service API provides static methods that applications use to locate
printers.
An application
invokes the lookupPrintServices method of PrintServiceLookup with a
DocFlavor and an AttrbuteSet:
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
aset.add(new Copies(2));
PrintService[] service =
PrintServiceLookup.lookupPrintServices(flavor,
aset);
This method returns an
array of print services representing printers that have the
capabilities specified in the attribute set and can print the data
format specified in the DocFlavor. See the Attributes chapter and
the Specifying Document
Types chapter for more help in choosing a DocFlavor and
creating an AttributeSet.
The base set of
printers returned from the lookupPrintServices method are the same
as the set of printers returned by the platform. For example, when
using Windows NT, the set of returned printers is the same as the
set of printers visible in the Windows Printer Control Panel.
Likewise, when using Solaris, the returned printers are the same as
those enumerated by the System V UNIX lpstat command. However,
since third parties can augment these sets, additional printers,
such as JINI printers, can be returned.
After obtaining a
suitable PrintService, the application can access its many query
methods to determine what values are supported for attribute
categories. The Obtaining a
Print Job section explains how to get a print job from
the PrintService.
StreamPrintService.
The
StreamPrintServiceFactory class has a
lookupStreamPrintServiceFactories method for locating stream print
services. This method, like the lookupPrintServices method in
PrintServiceLookup, takes a DocFlavor that represents the type of
the input document—in this case, DocFlavor.INPUT_STREAM.GIF.
Unlike lookupPrintServices, this method also takes a MIME type.
This MIME type represents the format of the output. Since this
example converts GIF to postscript, the MIME type is
"application/postscript". The DocFlavor class has the
getMimeType method for returning the MIME type from a DocFlavor.
The lookupStreamPrintServicesFactories method returns an array of
StreamPrintServiceFactory objects, which are factories for
StreamPrintService instances. This code sample demonstrates
obtaining an array of StreamPrintServiceFactory objects that can
return StreamPrintService objects able to convert a GIF image into
PostScript:
DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
String psMimeType = DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType();
StreamPrintServiceFactory[] psfactories =
StreamPrintServiceFactory.lookupStreamPrintServiceFactories(
flavor, psMimeType);
The
StreamPrintServiceFactory object has an instance method called
getPrintService that takes an OutputStream parameter and creates a
StreamPrintService instance that writes to that stream:
FileOutputStream fos = new FileOutputStream(filename); StreamPrintService psService = psfactories[0].getPrintService(fos);The JDK V1.4 includes one stream print service that can export Postscript from graphics calls, such as through the
Pageable and Printable interfaces. To
verify the availability of this service, use the
StreamPrintServiceFactory class to try to locate it. The Printing and Streaming 2D
Graphics chapter discusses streaming 2D graphics.
StreamPrintService
implements PrintService, which means you can use a
StreamPrintService wherever you can use a PrintService. The
application is responsible for closing the output stream after a
job has printed to the stream. Once the stream is closed, th e
StreamPrintService instance can no longer be used.