Class JRPrintServiceExporter

  • All Implemented Interfaces:
    Printable, Exporter<ExporterInput,​PrintServiceReportConfiguration,​PrintServiceExporterConfiguration,​ExporterOutput>

    public class JRPrintServiceExporter
    extends JRAbstractExporter<PrintServiceReportConfiguration,​PrintServiceExporterConfiguration,​ExporterOutput,​JRExporterContext>
    implements Printable
    Prints a JasperReports document using the Java Print Service API.

    There are four ways of using the Java Print Service with the Java 2D API:

    • Printing 2D graphics using java.awt.print.PrinterJob
    • Streaming 2D graphics using java.awt.print.PrinterJob
    • Printing 2D graphics using javax.print.DocPrintJob and a service-formatted javax.print.DocFlavor
    • Streaming 2D graphics using javax.print.DocPrintJob and a service-formatted javax.print.DocFlavor

    The JRPrintServiceExporter implementation takes the first approach and uses some of the methods added to the java.awt.print.PrinterJob class:

    • Static convenience methods to look up print services that can image 2D graphics, which are returned as an array of PrintService or StreamPrintServiceFactory objects depending on the method
    • Methods to set and get a PrintService on a PrinterJob
    • A pageDialog() method that takes a PrintRequestAttributeSet parameter
    • A printDialog()() method that takes a PrintRequestAttributeSet parameter
    • A print method that takes a PrintRequestAttributeSet parameter

    Looking Up a Printing Service

    This exporter tries to find a print service that supports the necessary attributes. The set of attributes can be supplied to the exporter in the form of a javax.print.attribute.PrintServiceAttributeSet object that is passed as the value for the special getPrintServiceAttributeSet() exporter configuration setting. For more details about the attributes that can be part of such an attribute set, check the Java Print Service API documentation.

    The lookup procedure might return one or more print services able to handle the specified print service attributes. If so, the exporter uses the first one in the list. If no suitable print service is found, then the exporter throws an exception. As an alternative, a javax.print.PrintService instance can be passed in using the getPrintService() exporter configuration setting when users do not want the Java Print Service to search for an available print service.

    Configuring the Printer Job

    Once a print service has been located, it is associated with a PrinterJob instance. Further customization is made by passing a javax.print.attribute.PrintRequestAttributeSet instance when calling the print() method on the PrinterJob object to start the printing process.

    To supply the javax.print.attribute.PrintRequestAttributeSet object containing the desired javax.print.attribute.PrintRequestAttribute values to the exporter, set the special getPrintRequestAttributeSet() exporter configuration setting.

    Displaying Print Dialogs

    If this exporter is invoked by a desktop or client-side Java application, you can offer the end user a final chance to customize the printer job before the printing process actually starts. The exporter has two other predefined configuration settings: isDisplayPageDialog() and isDisplayPrintDialog(), both receiving java.lang.Boolean values, which show or suppress the page dialog and/or the print dialog associated with the PrinterJob instance.

    The two dialogs are cross-platform. They enable users to alter the print service attributes and the print request attributes that are already set for the current print service and printer job. They also allow canceling the current printing procedure altogether. When batch printing a set of documents, if isDisplayPageDialog() or isDisplayPrintDialog() are set to true, a dialog window will pop up each time a document in the list is to be printed. This is very useful if you intend to set different printing options for each document. However, setting the same page/printing options each time would quickly become cumbersome. If same settings are intended for all documents in the list, the exporter provides two additional predefined export configuration settings: isDisplayPageDialogOnlyOnce() and isDisplayPrintDialogOnlyOnce(). These are only effective if the corresponding isDisplayPageDialog() or isDisplayPrintDialog() are set to true.

    If isDisplayPageDialogOnlyOnce() is true, then the page dialog will open only once, and the export options set within will be preserved for all documents in the list. The same thing happens when isDisplayPrintDialogOnlyOnce() is set to true - the print dialog will open only once.

    Below is an example of configuring the print service exporter taken from the supplied /demo/ samples/printservice sample:

     public void print() throws JRException
     {
       PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
       printRequestAttributeSet.add(MediaSizeName.ISO_A4);
    
       PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
       //printServiceAttributeSet.add(new PrinterName("Epson Stylus 820 ESC/P 2", null));
       //printServiceAttributeSet.add(new PrinterName("hp LaserJet 1320 PCL 6", null));
       //printServiceAttributeSet.add(new PrinterName("PDFCreator", null));
    
       JRPrintServiceExporter exporter = new JRPrintServiceExporter();
    
       exporter.setExporterInput(new SimpleExporterInput("build/reports/PrintServiceReport.jrprint"));
       SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
       configuration.setPrintRequestAttributeSet(printRequestAttributeSet);
       configuration.setPrintServiceAttributeSet(printServiceAttributeSet);
       configuration.setDisplayPageDialog(false);
       configuration.setDisplayPrintDialog(true);
       exporter.setConfiguration(configuration);
       exporter.exportReport();
    
       System.err.println("Printing time : " + (System.currentTimeMillis() - start));
     }
    Author:
    Teodor Danciu (teodord@users.sourceforge.net)
    See Also:
    PrintServiceExporterConfiguration