Print to file with Java

In this example we are going to see how to print a document to a .ps file in Java. This is very useful when you want to create simple and easy previews of the print that the user might perform.

In order to print to a file, one should follow these steps:

    • Open a new pdf file to print using BufferedInputStream(new FileInputStream("myfile.pdf")).
    • Create a PDF doc flavor using DocFlavor.INPUT_STREAM.PDF that returns aDocFlavor object.
    • Use PrintServiceLookup.lookupDefaultPrintService() to locate the default print service for this environment.
    • Use createPrintJob() to create and return a DocPrintJob capable of handling data from any of the supported document flavors.
    • Create a class that extends PrintJobAdapter.
    • and override printJobCompleted. Then register a listener to the print job to get notified when the job is complete using.
    • Set up the PrintRequestAttributeSet using HashPrintRequestAttributeSet.
    • Use attributes.add(new Destination(new"file:C:/"))) to set the destination document.

Let’s see the code:

package com.javacodegeeks.snippets.desktop;


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.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Destination;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

public class PrintToFileWithJava {

	private static boolean jobRunning = true;

	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

  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);

  // set up the attributes

  PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

  attributes.add(new Destination(new"file:C:/")));

  // Print a document with the specified job attributes.

  printJob.print(doc, attributes);

  while (jobRunning) {



  System.out.println("Exiting app");



	private static class JobCompleteMonitor extends PrintJobAdapter {
		public void printJobCompleted(PrintJobEvent jobEvent) {
			System.out.println("Job completed");
			jobRunning = false;


This was an example on how to print to file with Java.

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.
Notify of

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

1 Comment
Newest Most Voted
Inline Feedbacks
View all comments
Hari Vyas
Hari Vyas
4 years ago

Hi i implemented this code , but this throws an invalid flavor Exception, could you please reply if possible

Back to top button