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,printJobNoMoreEventsto 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,