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:
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 | 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.