net.sf.jasperreports.engine.export

## Class JRPrintServiceExporter

- java.lang.Object
- - net.sf.jasperreports.engine.JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>
  - - net.sf.jasperreports.engine.export.JRPrintServiceExporter

- All Implemented Interfaces:
    java.awt.print.Printable, JRExporter<ExporterInput,PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput>, Exporter<ExporterInput,PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput>

      public class JRPrintServiceExporter
      extends JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>
      implements java.awt.print.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));
       }

  Version:
    $Id: JRPrintServiceExporter.java 7063 2014-04-29 09:37:53Z shertage $
  Author:
    Teodor Danciu (teodord@users.sourceforge.net)
  See Also:
    `PrintServiceExporterConfiguration`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `JRPrintServiceExporter.ExporterContext`

    - ### Nested classes/interfaces inherited from class net.sf.jasperreports.engine.JRAbstractExporter

      `JRAbstractExporter.BaseExporterContext, JRAbstractExporter.PageRange`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected JRGraphics2DExporter` | `exporter`
    `protected SimpleGraphics2DReportConfiguration` | `grxConfiguration`
    `protected static java.lang.String` | `PRINT_SERVICE_EXPORTER_PROPERTIES_PREFIX`
    `protected int` | `reportIndex`

    - ### Fields inherited from class net.sf.jasperreports.engine.JRAbstractExporter

      `allSelector, crtCompositeConfiguration, crtCompositeItemConfiguration, crtItem, dateFormatCache, EXCEPTION_MESSAGE_KEY_END_PAGE_INDEX_OUT_OF_RANGE, EXCEPTION_MESSAGE_KEY_PAGE_INDEX_OUT_OF_RANGE, EXCEPTION_MESSAGE_KEY_START_PAGE_INDEX_OUT_OF_RANGE, exporterConfiguration, exporterContext, exporterInput, exporterOutput, filter, itemConfiguration, jasperPrint, jasperReportsContext, noBackcolorSelector, noneSelector, numberFormatCache, parameters, propertiesUtil, PROPERTY_DEFAULT_FILTER_FACTORY, PROPERTY_SUFFIX_DEFAULT_FILTER_FACTORY, styledTextUtil`

    - ### Fields inherited from interface java.awt.print.Printable

      `NO_SUCH_PAGE, PAGE_EXISTS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JRPrintServiceExporter()`
    `JRPrintServiceExporter(JasperReportsContext jasperReportsContext)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static boolean` | `checkAvailablePrinters()`
    `protected void` | `ensureOutput()`
    `void` | `exportReport()` Performs the export.
    `protected java.lang.Class<PrintServiceExporterConfiguration>` | `getConfigurationInterface()`
    `java.lang.String` | `getExporterKey()`
    `java.lang.String` | `getExporterPropertiesPrefix()` Returns the properties prefix for the current exporter.
    `protected java.lang.Class<PrintServiceReportConfiguration>` | `getItemConfigurationInterface()`
    `javax.print.PrintService` | `getPrintService()` Returns the `PrintService` instance used by the exporter last time the exportReport() method was run.
    `java.lang.Boolean[]` | `getPrintStatus()` Returns an array of `java.lang.Boolean` values, one for each appearance of the print dialog during the last export operation.
    `protected void` | `initExport()`
    `protected void` | `initReport()`
    `int` | `print(java.awt.Graphics graphics, java.awt.print.PageFormat pageFormat, int pageIndex)`

    - ### Methods inherited from class net.sf.jasperreports.engine.JRAbstractExporter

      `createFilter, defaultParseNumber, ensureInput, ensureJasperReportsContext, getBooleanCellValue, getCurrentConfiguration, getCurrentItemConfiguration, getCurrentJasperPrint, getCustomHandler, getDateCellValue, getDateFormat, getExporterContext, getExporterInput, getExporterOutput, getHyperlinkProducer, getJasperReportsContext, getLocale, getNumberCellValue, getNumberFormat, getOffsetX, getOffsetY, getPageRange, getParameter, getParameters, getPropertiesUtil, getReportContext, getStyledText, getStyledText, getTextFormatFactoryClass, getTextLocale, getTextTimeZone, getTextValue, getTextValueString, reset, resetClassLoader, resetExportContext, restoreElementOffsets, setClassLoader, setConfiguration, setConfiguration, setCurrentExporterInputItem, setExporterInput, setExporterOutput, setFrameElementsOffset, setJasperPrint, setJasperReportsContext, setOffset, setOffset, setParameter, setParameters, setReportContext`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### PRINT_SERVICE_EXPORTER_PROPERTIES_PREFIX

          protected static final java.lang.String PRINT_SERVICE_EXPORTER_PROPERTIES_PREFIX

      See Also:
        Constant Field Values

    - #### exporter

          protected JRGraphics2DExporter exporter

    - #### grxConfiguration

          protected SimpleGraphics2DReportConfiguration grxConfiguration

    - #### reportIndex

          protected int reportIndex

  - ### Constructor Detail

    - #### JRPrintServiceExporter

          public JRPrintServiceExporter()

      See Also:
        `JRPrintServiceExporter(JasperReportsContext)`

    - #### JRPrintServiceExporter

          public JRPrintServiceExporter(JasperReportsContext jasperReportsContext)

  - ### Method Detail

    - #### getConfigurationInterface

          protected java.lang.Class<PrintServiceExporterConfiguration> getConfigurationInterface()

      Specified by:
        `getConfigurationInterface` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`

    - #### getItemConfigurationInterface

          protected java.lang.Class<PrintServiceReportConfiguration> getItemConfigurationInterface()

      Specified by:
        `getItemConfigurationInterface` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`

    - #### ensureOutput

          protected void ensureOutput()

      Specified by:
        `ensureOutput` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`

    - #### exportReport

          public void exportReport()
                            throws JRException

      Description copied from interface: `Exporter`
      Performs the export.
      Specified by:
        `exportReport` in interface `Exporter<ExporterInput,PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput>`
      Specified by:
        `exportReport` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`
      Throws:
        `JRException`

    - #### initExport

          protected void initExport()

      Overrides:
        `initExport` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`

    - #### initReport

          protected void initReport()

      Overrides:
        `initReport` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`

    - #### print

          public int print(java.awt.Graphics graphics,
                  java.awt.print.PageFormat pageFormat,
                  int pageIndex)
                    throws java.awt.print.PrinterException

      Specified by:
        `print` in interface `java.awt.print.Printable`
      Throws:
        `java.awt.print.PrinterException`

    - #### checkAvailablePrinters

          public static boolean checkAvailablePrinters()

    - #### getPrintStatus

          public java.lang.Boolean[] getPrintStatus()

      Returns an array of `java.lang.Boolean` values, one for each appearance of the print dialog during the last export operation. A Boolean.TRUE value in this array means that for that particular occurrence of the print dialog, the OK button was hit. A Boolean.FALSE value means the respective print dialog was canceled.

    - #### getPrintService

          public javax.print.PrintService getPrintService()

      Returns the `PrintService` instance used by the exporter last time the exportReport() method was run.

    - #### getExporterKey

          public java.lang.String getExporterKey()

      Specified by:
        `getExporterKey` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`

    - #### getExporterPropertiesPrefix

          public java.lang.String getExporterPropertiesPrefix()

      Description copied from class: `JRAbstractExporter`
      Returns the properties prefix for the current exporter.
      Specified by:
        `getExporterPropertiesPrefix` in class `JRAbstractExporter<PrintServiceReportConfiguration,PrintServiceExporterConfiguration,ExporterOutput,JRExporterContext>`
      Returns:
        the properties prefix for the current exporter

© 2001-2010 Jaspersoft Corporation www.jaspersoft.com