CONTENTS | PREV | NEXT
You can print or stream 2D graphics
encapsulated in a Pageable or Printable object using a DocPrintJob
and a service-formatted DocFlavor. A DocFlavor can represent any
kind of data, including Java objects. An implementation of the
Pageable or Printable interface is a Java object. As discussed in
the Specifying Document
Types chapter, the Java Print Service API includes
pre-defined DocFlavor object constants for print data in the form
of a Java object. An application can look up print services or
stream print services supporting this type of data, encapsulate the
object in a Doc implemetation and submit it to the service in a
DocPrintJob. The Printing
the Service-Formatted Data section demonstrates printing
the data. The Streaming
Service-Formatted Print Data section demonstrates
streaming the data. Registering for events on 2D graphics printing
applications using DocPrintJob is done the same way as for document
printing applications using DocPrintJob. See Registering for Events for
more information.
Printing the Service-Formatted
Data
To locate print services that can
handle the service-formatted data, pass the appropriate
service-formatted DocFlavor object constant to the
lookupPrintServices method:
PrintService []services =
PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PRINTABLE,
null);
The printing application implements
the Printable interface. To create the Doc, use SimpleDoc, passing
this in for the printData, the service-formatted DocFlavor constant
for the DocFlavor, and an optional attribute set:
Doc doc = new SimpleDoc(this, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
Create the DocPrintJob, and submit
it to the service:
DocPrintJob pj = service[0].createPrintJob();
pj.print(doc);
See Example:
Print2DGraphics.java for the complete application.
Streaming Service-Formatted Print
Data
A stream print service can be used to
export 2D graphics encapsulated in a Java object to another format.
This example exports graphics in a Printable to Postscript:
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE
StreamPrintServiceFactory []factories =
StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor,
"application/postscript"));
if (factories.length == 0) {
System.err.println("No suitable factories");
System.exit(0);
}
try{
FileOutputStream fos = new FileOutputStream("out.ps");
StreamPrintService sps = factories[0].getPrintService(fos);
}
Doc doc = new SimpleDoc(this, flavor, null);
sps.createPrintJob().print(doc);
See Example:
Print2DtoStream.java for the complete application
CONTENTS | PREV | NEXT