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.

Byron Kiourtzoglou

Byron is a master software engineer working in the IT and Telecom domains. He is an applications developer in a wide variety of applications/services. He is currently acting as the team leader and technical architect for a proprietary service creation and integration platform for both the IT and Telecom industries in addition to a in-house big data real-time analytics solution. He is always fascinated by SOA, middleware services and mobile development. Byron is co-founder and Executive Editor at Java Code Geeks.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Fabio Ferreira
Fabio Ferreira
6 years ago

How can I do this using JasperReports?

mila
mila
4 years ago

How can I use this service for the web client,

Back to top button