print
Use streaming printing service in Java
In this example we are going to see how to use streaming printing services in a Java Desktop Application. This is very useful when you want to handle print jobs inside your application.
It’s very easy to use streaming printing services in Java. All you have to do is:
- Open an image using
new BufferedInputStream(new FileInputStream("myfile.gif"))
. - Prepare the output file using
new BufferedOutputStream(new FileOutputStream("myfile.ps"))
. - Create a GIF DocFlavor.
- Locate factories for print services that can be used with a print job to output a stream of data in the GIF format using
StreamPrintServiceFactory.lookupStreamPrintServiceFactories
. - Get a service that can print to the specified output stream using
getPrintService
. - Create a new DocPrintJob using
service.createPrintJob()
. - Print a document with the specified job attributes
- with
printJob.print(doc, null)
.
Let’s see the code:
package com.javacodegeeks.snippets.desktop; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.SimpleDoc; import javax.print.StreamPrintService; import javax.print.StreamPrintServiceFactory; import javax.print.event.PrintJobAdapter; import javax.print.event.PrintJobEvent; public class UseStreamingPrintingServiceInJava { private static boolean jobRunning = true; public static void main(String[] args) throws Exception { // Open the image file InputStream is = new BufferedInputStream(new FileInputStream("myfile.gif")); // Prepare the output file to receive the postscript OutputStream fos = new BufferedOutputStream(new FileOutputStream("myfile.ps")); // create a GIF doc flavor DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF; // Locate factories for print services that can be used with // a print job to output a stream of data in the GIF format StreamPrintServiceFactory[] factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories( flavor, DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType()); // if suitable factory found if (factories.length > 0) { // get a service that can print to the specified output stream. StreamPrintService service = factories[0].getPrintService(fos); // Create and return a PrintJob capable of handling data from // any of the supported document flavors. DocPrintJob printJob = service.createPrintJob(); // register a listener to get notified when the job is complete printJob.addPrintJobListener(new JobCompleteMonitor()); // Construct a SimpleDoc with the specified // print data, doc flavor and doc attribute set. Doc doc = new SimpleDoc(is, flavor, null); // Print a document with the specified job attributes. printJob.print(doc, null); while (jobRunning) { Thread.sleep(1000); } System.out.println("Exiting app"); is.close(); fos.close(); } } private static class JobCompleteMonitor extends PrintJobAdapter { @Override public void printJobCompleted(PrintJobEvent jobEvent) { System.out.println("Job completed"); jobRunning = false; } } }
This was an example on how to use streaming printing service in Java.