aboutsummaryrefslogtreecommitdiffstats
path: root/src/documentation/content/xdocs/0.93/intermediate.xml
diff options
context:
space:
mode:
Diffstat (limited to 'src/documentation/content/xdocs/0.93/intermediate.xml')
-rw-r--r--src/documentation/content/xdocs/0.93/intermediate.xml146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/documentation/content/xdocs/0.93/intermediate.xml b/src/documentation/content/xdocs/0.93/intermediate.xml
new file mode 100644
index 000000000..3a9a9494c
--- /dev/null
+++ b/src/documentation/content/xdocs/0.93/intermediate.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
+<document>
+ <header>
+ <title>Intermediate Format</title>
+ <version>$Revision$</version>
+ </header>
+ <body>
+ <note>
+ Please note that the intermediate format is an <strong>advanced feature</strong> and can be ignored by most
+ users of Apache FOP.
+ </note>
+ <section id="introduction">
+ <title>Introduction</title>
+ <p>
+ The intermediate format (IF) is a proprietary XML format that represents the area tree
+ generated by the layout engine. The area tree is conceptually defined in the
+ <a href="http://www.w3.org/TR/xsl/slice1.html#section-N742-Formatting">XSL-FO specification in chapter 1.1.2</a>.
+ The IF can be generated through the area tree XML Renderer (the XMLRenderer).
+ </p>
+ <p>
+ The intermediate format can be used to generate intermediate documents that are modified
+ before they are finally rendered to their ultimate output format. Modifications include
+ adjusting and changing trait values, adding or modifying area objects, inserting prefabricated
+ pages, overlays, imposition (n-up, rotation, scaling etc.). Multiple IF files can be combined
+ to a single output file.
+ </p>
+ </section>
+ <section id="usage">
+ <title>Usage of the Intermediate Format</title>
+ <p>
+ As already mentioned, the IF is generated by using the <strong>XMLRenderer</strong> (MIME type:
+ <strong>application/X-fop-areatree</strong>). So, you basically set the right MIME type for
+ the output format and process your FO files as if you would create a PDF file. However, there
+ is an important detail to consider: The various Renderers don't all use the same font sources.
+ To be able to create the right area tree for the ultimate output file, you need to create
+ the IF file using the right font setup. This is achieved by telling the XMLRenderer to mimic
+ another renderer. This is done by calling the XMLRenderer's mimicRenderer() method with an
+ instance of the ultimate target renderer as the single parameter. This has a consequence: An
+ IF file rendered with the Java2DRenderer may not look as expected when it was actually generated
+ for the PDF renderer. For renderers that use the same font setup, this restriction does not
+ apply (PDF and PS, for example). Generating the intermediate format file is the first step.
+ </p>
+ <p>
+ The second step is to reparse the IF file using the <strong>AreaTreeParser</strong> which is
+ found in the org.apache.fop.area package. The pages retrieved from the IF file are added to an
+ AreaTreeModel instance from where they are normally rendered using one of the available Renderer
+ implementations. You can find examples for the IF processing in the
+ <a href="http://svn.apache.org/viewcvs.cgi/xmlgraphics/fop/trunk/examples/embedding/java/embedding/intermediate/"><code>examples/embedding</code></a>
+ directory in the FOP distribution
+ </p>
+ <p>
+ The basic pattern to parse the IF format looks like this:
+ </p>
+ <source><![CDATA[
+FopFactory fopFactory = FopFactory.newInstance();
+
+// Setup output
+OutputStream out = new java.io.FileOutputStream(pdffile);
+out = new java.io.BufferedOutputStream(out);
+try {
+ //Setup fonts and user agent
+ FontInfo fontInfo = new FontInfo();
+ FOUserAgent userAgent = fopFactory.newFOUserAgent();
+
+ //Construct the AreaTreeModel that will received the individual pages
+ AreaTreeModel treeModel = new RenderPagesModel(userAgent,
+ MimeConstants.MIME_PDF, fontInfo, out);
+
+ //Parse the IF file into the area tree
+ AreaTreeParser parser = new AreaTreeParser();
+ Source src = new StreamSource(myIFFile);
+ parser.parse(src, treeModel, userAgent);
+
+ //Signal the end of the processing. The renderer can finalize the target document.
+ treeModel.endDocument();
+} finally {
+ out.close();
+}]]></source>
+ <p>
+ This example simply reads an IF file and renders it to a PDF file. Please note, that in normal
+ FOP operation you're shielded from having to instantiate the FontInfo object yourself. This
+ is normally a task of the AreaTreeHandler which is not present in this scenario. The same
+ applies to the AreaTreeModel instance, in this case an instance of a subclass called
+ RenderPagesModel. RenderPagesModel is ideal in this case as it has very little overhead
+ processing the individual pages. An important line in the example is the call to
+ <code>endDocument()</code> on the AreaTreeModel. This lets the Renderer know that the processing
+ is now finished.
+ </p>
+ <p>
+ The intermediate format can also be used from the <a href="running.html#standalone-start">command-line</a>
+ by using the "-atin" parameter for specifying the area tree XML as input file. You can also
+ specify a "mimic renderer" by inserting a MIME type between "-at" and the output file.
+ </p>
+ <section id="concat">
+ <title>Concatenating Documents</title>
+ <p>
+ This initial example is obviously not very useful. It would be faster to create the PDF file
+ directly. As the <a href="http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/examples/embedding/java/embedding/intermediate/ExampleConcat.java">ExampleConcat.java</a>
+ example shows you can easily parse multiple IF files in a row and add the parsed pages to the
+ same AreaTreeModel instance which essentially concatenates all the input document to one single
+ output document.
+ </p>
+ </section>
+ <section id="modifying">
+ <title>Modifying Documents</title>
+ <p>
+ One of the most important use cases for the intermediate format is obviously modifying the area
+ tree XML before finally rendering it to the target format. You can easily use XSLT to process
+ the IF file according to your needs. Please note, that we will currently not formally describe
+ the intermediate format. You need to have a good understanding its structure so you don't
+ create any non-parseable files. We may add an XML Schema and more detailed documentation at a
+ later time. You're invited to help us with that.
+ </p>
+ </section>
+ <section id="advanced">
+ <title>Advanced Use</title>
+ <p>
+ The generation of the intermediate format as well as it parsing process has been designed to allow
+ for maximum flexibility and optimization. Please note that you can call <code>setTransformerHandler()</code> on
+ XMLRenderer to give the XMLRenderer your own TransformerHandler instance in case you would like to
+ do custom serialization (to a W3C DOM, for example) and/or to directly modify the area tree using
+ XSLT. The AreaTreeParser on the other side allows you to retrieve a ContentHandler instance where
+ you can manually send SAX events to to start the parsing process (see <code>getContentHandler()</code>).
+ </p>
+ </section>
+ </section>
+ </body>
+</document>