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.
