Files
spring-integration-extensions/spring-integration-print/README.md
Gunnar Hillert 255a74ecac Improving the Print Adapter
* Add better namespace support
* Add documentation
* Add test cases (minimal)
* Add functionality
2012-08-13 16:03:56 -04:00

121 lines
6.3 KiB
Markdown

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:
* http://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
<dependencies>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-print</artifactId>
<version>1.0.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies>
## 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:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-print="http://www.springframework.org/schema/integration/print"
xsi:schemaLocation="
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/print http://www.springframework.org/schema/integration/print/spring-integration-print.xsd">
</beans>
An example of declaring a *Print Outbound Channel Adapter* is shown below:
<int-print:outbound-channel-adapter id="printOutboundChannelAdapter"
channel="input"
copies="2"
doc-flavor="java.lang.String"
mime-type="text/plain; charset=utf-8"
sides="DUPLEX"/>
[Java Print Service]: http://docs.oracle.com/javase/6/docs/technotes/guides/jps/index.html
[PrintService]: http://docs.oracle.com/javase/6/docs/api/javax/print/PrintService.html
[Chromaticity]: http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Chromaticity.html
[Copies]: http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Copies.html
[DocFlavor]: http://docs.oracle.com/javase/6/docs/api/javax/print/DocFlavor.html
[MediaTray]: http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaTray.html
[Print Attribute]: http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/Attribute.html
[MediaSizeName]: http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaSizeName.html
[Sides]: http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Sides.html