Spring Integration Print Support ================================ ## Overview The *Spring Integration Print* allows you to print payloads using the [Java Print Service][]. As such one *Outbound Channel Adapter* is provided. ## Requirements This module depends by default on Spring Integration 2.2. When using this module, please be aware that printing using [Java Print Service] can be unpredictable depending on the uses platform and the used printer. For some more details, please see: * https://hillert.blogspot.com/2011/12/java-print-service-frustrations.html Currently the Print Support has been tested using a *Brother HL-4070CDW* which exhibits several issues such as the inability to execute a print job that prints more than one copy for each page. If you use the Print Module, please report back any compatibility issues with your used printers. ## Dependency Declaration ### Gradle dependencies { … compile "org.springframework.integration:spring-integration-print:1.0.0.BUILD-SNAPSHOT" … } ### Maven org.springframework.integration spring-integration-print 1.0.0.BUILD-SNAPSHOT ## Print Outbound Channel Adapter The *Print Outbound Channel Adapter* is implemented using the *PrintMessageHandler* class. It in turn delegates to the *PrintServiceExecutor* class. The *PrintServiceExecutor* is responsible for initializing the Java *[PrintService][]*. As such, you can initialize the *PrintServiceExecutor* with providing a: * Printer Name * Custom implementation of the *[PrintService][]* interface (Useful for testing) If you provide neither a printer name nor an implementation of the *[PrintService][]* interface, then the systems default printer is chosen. The following properties can be set on the *Print Outbound Channel Adapter*: ### printJobName *Optional* property that let's you specify the name of the print job as it is added to the print queue. Under the covers, this property will create a *javax.print.attribute.standard.JobName* and add it to the respective *PrintRequestAttributeSet*. This property is not used, if not specified (No explicit default value). ### mediaSizeName *Optional* property that let's you specify the [MediaSizeName][]. Under the covers, this property will add the provided [MediaSizeName][] to the respective *PrintRequestAttributeSet*. This property is not used, if not specified (No explicit default value). ### sides Let's you specify how the pages are are printed to the selected medium, e.g. duplex or one-sided. Under the covers, this property will add the provided [Sides][] instance to the respective *PrintRequestAttributeSet*. This property is not used, if not specified (No explicit default value). ### copies Let's you specify an integer value that indicates how many time each print page shall be printed. Under the covers, this property will add a [Copies][] instance to the respective *PrintRequestAttributeSet*. This property is not used, if not specified (No explicit default value). ### mediaTray Let's you specify the media tray/bin for the print job. This property can be used instead of providing the *mediaSizeName* property. Under the covers, this property will add the provided [MediaTray][] instance to the respective *PrintRequestAttributeSet*. This property is not used, if not specified (No explicit default value). ### chromaticity Let's you specify whether you want to do monochrome or color printing. Under the covers, this property will add the provided [Chromaticity][] instance to the respective *PrintRequestAttributeSet*. This property is not used, if not specified (No explicit default value). ### docFlavor Let's you specify the [DocFlavor]. If not specified, this property will default to *DocFlavor.STRING.TEXT_PLAIN*. **IMPORTANT!** Every property is validated against the to be used [Java Print Service]. Therefore, if the selected [Java Print Service] is not supported, an *IllegalArgumentException* will be thrown. ### Determining you printer capabilities. In order to get some indication what capabilities are supported by your printer, you may want to too look at the *PrintServiceExecutor*'s *getPrinterInfo()* method. When executed, it returns a list of: * Supported [DocFlavor][]s * Supported Attribute Categories * Supported [Print Attribute][]s ## Namespace Support *Spring Integration* also provides XML Namespace support for the Print support. Simply add the following Namespace declaration: An example of declaring a *Print Outbound Channel Adapter* is shown below: [Java Print Service]: https://docs.oracle.com/javase/6/docs/technotes/guides/jps/index.html [PrintService]: https://docs.oracle.com/javase/6/docs/api/javax/print/PrintService.html [Chromaticity]: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Chromaticity.html [Copies]: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Copies.html [DocFlavor]: https://docs.oracle.com/javase/6/docs/api/javax/print/DocFlavor.html [MediaTray]: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaTray.html [Print Attribute]: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/Attribute.html [MediaSizeName]: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaSizeName.html [Sides]: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Sides.html