print
Determine that print job has finished
With this example we are going to see how we can determine that a print job has finished.
It’s very easy to do that, as you only have to :
- Open a pdf file to print.
- Create a new
PrintService
. - Create a new
DocPrintJob.
- Create a class that extends
PrintJobAdapter
. - Override
printJobCanceled
,printJobCompleted
,printJobFailed
,printJobNoMoreEvents
to monitor the status of the print job.
Let’s take a look at the code tha follows:
package com.javacodegeeks.snippets.desktop; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.SimpleDoc; import javax.print.event.PrintJobAdapter; import javax.print.event.PrintJobEvent; public class DetermineThatPrintJobHasFinished { public static void main(String[] args) throws Exception { // Open the image file InputStream is = new BufferedInputStream(new FileInputStream("myfile.pdf")); // create a PDF doc flavor DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF; // Locate the default print service for this environment. PrintService service = PrintServiceLookup.lookupDefaultPrintService(); // 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 JobCompleteMonitor monitor = new JobCompleteMonitor(); printJob.addPrintJobListener(monitor); // 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); monitor.waitForJobCompletion(); is.close(); } private static class JobCompleteMonitor extends PrintJobAdapter { private boolean completed = false; @Override public void printJobCanceled(PrintJobEvent pje) { signalCompletion(); } @Override public void printJobCompleted(PrintJobEvent pje) { signalCompletion(); } @Override public void printJobFailed(PrintJobEvent pje) { signalCompletion(); } @Override public void printJobNoMoreEvents(PrintJobEvent pje) { signalCompletion(); } private void signalCompletion() { synchronized (JobCompleteMonitor.this) { completed = true; JobCompleteMonitor.this.notify(); } } public synchronized void waitForJobCompletion() { try { while (!completed) { wait(); } } catch (InterruptedException e) { } } } }
This was an example on how to determine that print job has finished.
How can I do this using JasperReports?
How can I use this service for the web client,