[[fop-component]]
= FOP Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-fop/src/main/docs/fop-component.adoc
:docTitle: FOP
:artifactId: camel-fop
:description: Render messages into PDF and other output formats supported by Apache FOP.
:since: 2.10
:supportLevel: Stable
:component-header: Only producer is supported

*Since Camel {since}*

*{component-header}*

The FOP component allows you to render a message into different output
formats using http://xmlgraphics.apache.org/fop/index.html[Apache FOP].

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-fop</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,text]
----------------------------
fop://outputFormat?[options]
----------------------------

== Output Formats

The primary output format is PDF but other output
http://xmlgraphics.apache.org/fop/0.95/output.html[formats] are also
supported:

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|name |outputFormat |description

|PDF |application/pdf |Portable Document Format

|PS |application/postscript |Adobe Postscript

|PCL |application/x-pcl |Printer Control Language

|PNG |image/png |PNG images

|JPEG |image/jpeg |JPEG images

|SVG |image/svg+xml |Scalable Vector Graphics

|XML |application/X-fop-areatree |Area tree representation

|MIF |application/mif |FrameMaker's MIF

|RTF |application/rtf |Rich Text Format

|TXT |text/plain |Text
|=======================================================================

The complete list of valid output formats can be found in the `MimeConstants.java` source file.

== Endpoint Options

// component options: START
The FOP component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END



// endpoint options: START
The FOP endpoint is configured using URI syntax:

----
fop:outputType
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *outputType* | *Required* The primary output format is PDF but other output formats are also supported. The value can be one of: pdf, ps, pcl, png, jpeg, svg, xml, mif, rtf, txt |  | FopOutputType
|===


=== Query Parameters (5 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *fopFactory* (producer) | Allows to use a custom configured or implementation of org.apache.fop.apps.FopFactory. |  | FopFactory
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *userConfigURL* (producer) | The location of a configuration file which can be loaded from classpath or file system. |  | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END



The location of a configuration file with the following
http://xmlgraphics.apache.org/fop/1.0/configuration.html[structure].
The file is loaded from the classpath by
default. You can use `file:`, or `classpath:` as prefix to load the
resource from file or classpath. In previous releases the file is always
loaded from file system.

== Message Operations

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|name |default value |description

|CamelFop.Output.Format |  | Overrides the output format for that message

|CamelFop.Encrypt.userPassword |  | PDF user password

|CamelFop.Encrypt.ownerPassword |  | PDF owner passoword

|CamelFop.Encrypt.allowPrint | true |Allows printing the PDF

|CamelFop.Encrypt.allowCopyContent |true |Allows copying content of the PDF

|CamelFop.Encrypt.allowEditContent |true |Allows editing content of the PDF

|CamelFop.Encrypt.allowEditAnnotations |true |Allows editing annotation of the PDF

|CamelFop.Render.producer |Apache FOP |Metadata element for the system/software that produces the document

|CamelFop.Render.creator |  | Metadata element for the user that created the document

|CamelFop.Render.creationDate |  | Creation Date

|CamelFop.Render.author |  | Author of the content of the document

|CamelFop.Render.title |  | Title of the document

|CamelFop.Render.subject |  | Subject of the document

|CamelFop.Render.keywords |  | Set of keywords applicable to this document
|=======================================================================

== Example

Below is an example route that renders PDFs from xml data and xslt
template and saves the PDF files in target folder:

[source,java]
---------------------------------
from("file:source/data/xml")
    .to("xslt:xslt/template.xsl")
    .to("fop:application/pdf")
    .to("file:target/data");
---------------------------------


include::camel-spring-boot::page$fop-starter.adoc[]
