xmlgraphics-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vhenneb...@apache.org
Subject svn commit: r569118 [21/49] - in /xmlgraphics/site/deploy/fop: ./ 0.93/ 0.94/ 0.94/images/ dev/ dev/design/ skin/ trunk/
Date Thu, 23 Aug 2007 19:00:51 GMT
Added: xmlgraphics/site/deploy/fop/0.94/running.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/site/deploy/fop/0.94/running.xml?rev=569118&view=auto
==============================================================================
--- xmlgraphics/site/deploy/fop/0.94/running.xml (added)
+++ xmlgraphics/site/deploy/fop/0.94/running.xml Thu Aug 23 12:00:37 2007
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><!--
+  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 V1.3//EN" "document-v13.dtd">
+<document>
+  <header>
+    <title>Running Apache FOP</title>
+    <version>$Revision: 569104 $</version>
+  </header>
+
+  <body>
+    <section id="require">
+      <title>System Requirements</title>
+      <p>The following software must be installed:</p>
+      <ul>
+        <li>Java 1.3.x or later Runtime Environment.</li>
+        <li>
+          Apache FOP. The <link href="../download.html">FOP distribution</link> includes all libraries that you will 
+          need to run a basic FOP installation. These can be found in the [fop-root]/lib directory. These 
+          libraries include the following:
+          <ul>
+            <li>
+              A JAXP-compatible XML Parser (FOP comes with <link class="fork" href="ext:xerces">Apache Xerces-J</link>).
+            </li>
+            <li>
+              A JAXP-compatible XSLT Processor (FOP comes with <link class="fork" href="ext:xalan">Apache Xalan-J</link>).
+            </li>
+            <li><link class="fork" href="ext:batik">Apache Batik</link>, an SVG library.</li>
+            <li><link class="fork" href="ext:jakarta/commons/logging">Apache Jakarta Commons Logging</link>, a logger abstraction kit.</li>
+            <li><link class="fork" href="ext:jakarta/commons/io">Apache Jakarta Commons IO</link>, a library with I/O utilities.</li>
+            <li><link class="fork" href="ext:excalibur/framework">Apache Excalibur/Avalon Framework</link>, for XML configuration handling.</li>
+          </ul>
+        </li>
+      </ul>
+      <p>The following software is optional, depending on your needs:</p>
+      <ul>
+        <li>
+          Graphics libraries. Generally, FOP contains direct support for the most important
+          bitmap image formats (including PNG, TIFF, JPEG and GIF). If you're using JDK 1.3, 
+          you may need additional packages to get GIF images to work. See 
+          <link href="graphics.html">FOP: Graphics Formats</link> for details.
+        </li>
+        <li>
+          PDF encryption. See <link href="pdfencryption.html">FOP: PDF Encryption</link> for details.
+        </li>
+      </ul>
+      <p>In addition, the following system requirements apply:</p>
+      <ul>
+        <li>
+          If you will be using FOP to process SVG, you must do so in a graphical environment. 
+          See <link href="graphics.html#batik">FOP: Graphics (Batik)</link> for details.
+        </li>
+      </ul>
+    </section>
+    <section id="install">
+      <title>Installation</title>
+      <section id="install-instruct">
+        <title>Instructions</title>
+        <p>
+          Basic FOP installation consists of first unzipping the <code>.gz</code> file that is the 
+          distribution medium, then unarchiving the resulting <code>.tar</code> file in a 
+          directory/folder that is convenient on your system. Please consult your operating system 
+          documentation or Zip application software documentation for instructions specific to your 
+          site.
+        </p>
+      </section>
+      <section id="install-problems">
+        <title>Problems</title>
+        <p>
+          Some Mac OSX users have experienced filename truncation problems using Stuffit to unzip 
+          and unarchive their distribution media. This is a legacy of older Mac operating systems, 
+          which had a 31-character pathname limit. Several Mac OSX users have recommended that 
+          Mac OSX users use the shell command <code>tar -xzf</code> instead.
+        </p>
+      </section>
+    </section>
+    <section id="standalone-start">
+      <title>Starting FOP as a Standalone Application</title>
+      <section id="fop-script">
+        <title>Using the fop script or batch file</title>
+      <p>
+        The usual and recommended practice for starting FOP from the command line is to run the 
+        batch file fop.bat (Windows) or the shell script fop (Unix/Linux).
+        These scripts require that the environment variable JAVA_HOME be 
+        set to a path pointing to the appropriate Java installation on your system. Macintosh OSX 
+        includes a Java environment as part of its distribution. We are told by Mac OSX users that 
+        the path to use in this case is <code>/Library/Java/Home</code>. <strong>Caveat:</strong>
+        We suspect that, as Apple releases new Java environments and as FOP upgrades the minimum 
+        Java requirements, the two will inevitably not match on some systems. Please see 
+        <link href="http://developer.apple.com/java/faq">Java on Mac OSX FAQ</link> for information as 
+        it becomes available.
+      </p>
+      <source xml:space="preserve"><![CDATA[
+USAGE
+Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl|-ps|-txt|-at [mime]|-print] <outfile>
+ [OPTIONS]  
+  -d                debug mode   
+  -x                dump configuration settings  
+  -q                quiet mode  
+  -c cfg.xml        use additional configuration file cfg.xml
+  -l lang           the language to use for user information 
+  -r                relaxed/less strict validation (where available)
+  -dpi xxx          target resolution in dots per inch (dpi) where xxx is a number
+  -s                for area tree XML, down to block areas only
+  -v                to show FOP version being used
+
+  -o [password]     PDF file will be encrypted with option owner password
+  -u [password]     PDF file will be encrypted with option user password
+  -noprint          PDF file will be encrypted without printing permission
+  -nocopy           PDF file will be encrypted without copy content permission
+  -noedit           PDF file will be encrypted without edit content permission
+  -noannotations    PDF file will be encrypted without edit annotation permission
+  -pdfprofile prof  PDF file will be generated with the specified profile
+                    (Examples for prof: PDF/A-1b or PDF/X-3:2003)
+
+ [INPUT]  
+  infile            xsl:fo input file (the same as the next) 
+  -fo  infile       xsl:fo input file  
+  -xml infile       xml input file, must be used together with -xsl 
+  -atin infile      area tree input file 
+  -xsl stylesheet   xslt stylesheet 
+ 
+  -param name value <value> to use for parameter <name> in xslt stylesheet
+                    (repeat '-param name value' for each parameter)
+ 
+ [OUTPUT] 
+  outfile           input will be rendered as PDF into outfile
+  -pdf outfile      input will be rendered as PDF (outfile req'd)
+  -pdfa1b outfile   input will be rendered as PDF/A-1b compliant PDF
+                    (outfile req'd, same as "-pdf outfile -pdfprofile PDF/A-1b")
+  -awt              input will be displayed on screen 
+  -rtf outfile      input will be rendered as RTF (outfile req'd)
+  -pcl outfile      input will be rendered as PCL (outfile req'd) 
+  -ps outfile       input will be rendered as PostScript (outfile req'd) 
+  -afp outfile      input will be rendered as AFP (outfile req'd)
+  -tiff outfile     input will be rendered as TIFF (outfile req'd)
+  -png outfile      input will be rendered as PNG (outfile req'd)
+  -txt outfile      input will be rendered as plain text (outfile req'd) 
+  -at [mime] out    representation of area tree as XML (outfile req'd) 
+                    specify optional mime output to allow AT to be converted
+                    to final format later
+  -print            input file will be rendered and sent to the printer 
+                    see options with "-print help" 
+  -out mime outfile input will be rendered using the given MIME type
+                    (outfile req'd) Example: "-out application/pdf D:\out.pdf"
+                    (Tip: "-out list" prints the list of supported MIME types)
+  -mif outfile      input will be rendered as MIF (FrameMaker) (outfile req'd)
+                    Experimental feature - requires additional fop-sandbox.jar.
+  -svg outfile      input will be rendered as an SVG slides file (outfile req'd) 
+                    Experimental feature - requires additional fop-sandbox.jar.
+
+  -foout outfile    input will only be XSL transformed. The intermediate 
+                    XSL-FO file is saved and no rendering is performed. 
+                    (Only available if you use -xml and -xsl parameters)
+
+
+ [Examples]
+  Fop foo.fo foo.pdf 
+  Fop -fo foo.fo -pdf foo.pdf (does the same as the previous line)
+  Fop -xml foo.xml -xsl foo.xsl -pdf foo.pdf
+  Fop -xml foo.xml -xsl foo.xsl -foout foo.fo
+  Fop foo.fo -mif foo.mif
+  Fop foo.fo -rtf foo.rtf
+  Fop foo.fo -print or Fop -print foo.fo 
+  Fop foo.fo -awt]]></source>
+      <p>
+        PDF encryption is only available if FOP was compiled with encryption support 
+        <strong>and</strong> if compatible encryption support is available at run time. 
+        Currently, only the JCE is supported. Check the <link href="pdfencryption.html">Details</link>.
+      </p>
+      </section>
+      <section id="your-own-script">
+        <title>Writing your own script</title>
+        <p>FOP's entry point for your own scripts is the class
+<code>org.apache.fop.cli.Main</code>. The general pattern for the
+        command line is: <code>java -classpath &lt;CLASSPATH&gt;
+        org.apache.fop.cli.Main &lt;arguments&gt;</code>. The arguments
+        consist of the options and infile and outfile specifications
+        as shown above for the standard scripts. You may wish to review
+        the standard scripts to make sure that 
+        you get your environment properly configured. 
+        </p>
+      </section>
+      <section id="jar-option">
+        <title>Running with java's <code>-jar</code> option</title>
+      <p>
+        As an alternative to the start scripts you can run <code>java
+        -jar path/to/build/fop.jar &lt;arguments&gt;</code>, relying on
+        FOP to build the classpath for running FOP dynamically, see <link href="#dynamical-classpath">below</link>. If you use hyphenation,
+        you must put <code>fop-hyph.jar</code> in the <code>lib</code>
+        directory.
+      </p>
+
+      <p>You can also run <code>java -jar path/to/fop.jar
+      &lt;arguments&gt;</code>, relying on the <code>Class-Path</code>
+      entry in the manifest file. This works if you put
+      <code>fop.jar</code> and all jar files from the <code>lib</code>
+      directory in a single directory. If you use hyphenation, you
+      must also put <code>fop-hyph.jar</code> in that directory.</p>
+
+      <p>In both cases the arguments consist of the options and
+        infile and outfile specifications as shown above for the
+        standard scripts.</p>
+      </section>
+      <section id="dynamical-classpath">
+        <title>FOP's dynamical classpath construction</title>
+
+        <p>If FOP is started without a proper classpath, it tries to
+        add its dependencies dynamically. If the system property
+        <code>fop.home</code> contains the name of a directory, then
+        FOP uses that directory as the base directory for its
+        search. Otherwise the current working directory is the base
+        directory. If the base directory is called <code>build</code>,
+        then its parent directory becomes the base directory.</p>
+
+        <p>FOP expects to find <code>fop.jar</code> in the
+        <code>build</code> subdirectory of the base directory, and
+        adds it to the classpath. Subsequently FOP adds all
+        <code>jar</code> files in the lib directory to the
+        classpath. The lib directory is either the <code>lib</code>
+        subdirectory of the base directory, or, if that does not
+        exist, the base directory itself.</p>
+
+        <p>If the system property <code>fop.optional.lib</code>
+        contains the name of a directory, then all <code>jar</code>
+        files in that directory are also added to the classpath. See
+        the methods <code>getJARList</code> and
+        <code>checkDependencies</code> in
+        <code>org.apache.fop.cli.Main</code>.</p>
+
+      </section>
+    </section>
+    <section id="check-input">
+      <title>Using Xalan to Check XSL-FO Input</title>
+      <p>
+        FOP sessions that use -xml and -xsl input instead of -fo input are actually 
+        controlling two distinct conversions: Tranforming XML to XSL-FO, then formatting 
+        the XSL-FO to PDF (or another FOP output format).
+        Although FOP controls both of these processes, the first is included merely as 
+        a convenience and for performance reasons.
+        Only the second is part of FOP's core processing.
+        If a user has a problem running FOP, it is important to determine which of these 
+        two processes is causing the problem.
+        If the problem is in the first process, the user's stylesheet is likely the cause.
+        The FOP development team does not have resources to help with stylesheet issues, 
+        although we have included links to some useful 
+        <link href="../resources.html#specs">Specifications</link> and 
+        <link href="../resources.html#articles">Books/Articles</link>.
+        If the problem is in the second process, FOP may have a bug or an unimplemented 
+        feature that does require attention from the FOP development team.
+      </p>
+      <note>The user is always responsible to provide correct XSL-FO code to FOP.</note>
+      <p>
+        In the case of using -xml and -xsl input, although the user is responsible for 
+        the XSL-FO code that is FOP's input, it is not visible to the user. To make the 
+        intermediate FO file visible, the FOP distribution includes the "-foout" option 
+        which causes FOP to run only the first (transformation) step, and write the 
+        results to a file. (See also the Xalan command-line below)
+      </p>
+      <note>
+        When asking for help on the FOP mailing lists, <em>never</em> attach XML and 
+        XSL to illustrate the issue. Always run the XSLT step (-foout) and send the 
+        resulting XSL-FO file instead. Of course, be sure that the XSL-FO file is 
+        correct before sending it.
+      </note>
+      <p>
+        The -foout option works the same way as if you would call the 
+        <link href="http://xml.apache.org/xalan-j/commandline.html">Xalan command-line</link>:
+      </p>
+      <p>
+        <code>java org.apache.xalan.xslt.Process -IN xmlfile -XSL file -OUT outfile</code>
+      </p>
+      <p>
+        Note that there are some subtle differences between the FOP and Xalan command-lines.
+      </p>
+    </section>
+    <section id="memory">
+      <title>Memory Usage</title>
+      <p>
+        FOP can consume quite a bit of memory, even though this has been continually improved.
+        This is partly inherent to the formatting process and partly caused by implementation choices.
+        All FO processors currently on the market have memory problems with certain layouts.
+      </p>
+      <p>
+        If you are running out of memory when using FOP, here are some ideas that may help:
+      </p>
+      <ul>
+        <li>
+          Increase memory available to the JVM. See 
+          <link href="http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html">the -Xmx option</link> 
+          for more information.
+          <warning>
+            It is usually unwise to increase the memory allocated to the JVM beyond the amount of 
+            physical RAM, as this will generally cause significantly slower performance.
+          </warning>
+        </li>
+        <li>
+          Avoid forward references.
+          Forward references are references to some later part of a document.
+          Examples include page number citations which refer to pages which follow the citation, 
+          tables of contents at the beginning of a document, and page numbering schemes that 
+          include the total number of pages in the document 
+          (<link href="../faq.html#pagenum">"page N of TOTAL"</link>).
+          Forward references cause all subsequent pages to be held in memory until the reference 
+          can be resolved, i.e. until the page with the referenced element is encountered.
+          Forward references may be required by the task, but if you are getting a memory 
+          overflow, at least consider the possibility of eliminating them.
+          A table of contents could be replaced by PDF bookmarks instead or moved to the end of 
+          the document (reshuffle the paper could after printing).
+        </li>
+        <li>
+          Avoid large images, especially if they are scaled down.
+          If they need to be scaled, scale them in another application upstream from FOP.
+          For many image formats, memory consumption is driven mainly by the size of the image 
+          file itself, not its dimensions (width*height), so increasing the compression rate 
+          may help.
+        </li>
+        <li>
+          Use multiple page sequences.
+          FOP starts rendering after the end of a page sequence is encountered.
+          While the actual rendering is done page-by-page, some additional memory is 
+          freed after the page sequence has been rendered.
+          This can be substantial if the page sequence contains lots of FO elements.
+        </li>
+      </ul>
+    </section>
+    <section id="problems">
+      <title>Problems</title>
+      <p>If you have problems running FOP, please see the <link href="../gethelp.html">"How to get Help" page</link>.</p>
+    </section>
+  </body>
+</document>
\ No newline at end of file

Propchange: xmlgraphics/site/deploy/fop/0.94/running.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/site/deploy/fop/0.94/running.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xmlgraphics/site/deploy/fop/0.94/servlets.html
URL: http://svn.apache.org/viewvc/xmlgraphics/site/deploy/fop/0.94/servlets.html?rev=569118&view=auto
==============================================================================
--- xmlgraphics/site/deploy/fop/0.94/servlets.html (added)
+++ xmlgraphics/site/deploy/fop/0.94/servlets.html Thu Aug 23 12:00:37 2007
@@ -0,0 +1,608 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.7">
+<meta name="Forrest-skin-name" content="pelt">
+<title>Servlets</title>
+<link type="text/css" href="../skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="../skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="../skin/print.css" rel="stylesheet">
+<link type="text/css" href="../skin/profile.css" rel="stylesheet">
+<script src="../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="../">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://xmlgraphics.apache.org/"><img class="logoImage" alt="Apache XML Graphics" src="../images/group-logo.gif" title="Apache XML Graphics is responsible for the creation and maintenance of software for managing the conversion of XML formats to graphical output, and the creation and maintenance of related software components, based on software licensed to the Foundation"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://xmlgraphics.apache.org/fop/"><img class="logoImage" alt="Apache FOP" src="../images/logo.jpg" title="Apache FOP (Formatting Objects Processor) is the world's first output independent formatter. Output formats currently supported include PDF, PCL, PS, SVG, XML (area tree representation), Print, AWT, MIF and TXT. The primary output target is PDF."></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="xmlgraphics.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input attr="value" name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="base-not-selected" href="../index.html">Home</a>
+</li>
+<li>
+<a class="base-not-selected" href="../0.93/index.html">Version 0.93</a>
+</li>
+<li class="current">
+<a class="base-selected" href="../0.94/index.html">Version 0.94</a>
+</li>
+<li>
+<a class="base-not-selected" href="../trunk/index.html">FOP Trunk</a>
+</li>
+<li>
+<a class="base-not-selected" href="../dev/index.html">Development</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("<text>Last Published:</text> " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">apache.org</a> &gt; <a href="http://xml.apache.org/">XML Federation</a> &gt; <a href="http://xmlgraphics.apache.org/">xmlgraphics.apache.org</a><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_selected_1.1', '../skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('../skin/images/chapter_open.gif');">FOP 0.94</div>
+<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../0.94/index.html">About</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/releaseNotes_0.94.html">Release Notes</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/changes_0.94.html">Changes</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/knownissues_overview.html">Known Issues</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/upgrading.html">Upgrading</a>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.1.6', '../skin/')" id="menu_selected_1.1.6Title" class="menutitle" style="background-image: url('../skin/images/chapter_open.gif');">Using FOP</div>
+<div id="menu_selected_1.1.6" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../0.94/compiling.html">Build</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/configuration.html">Configure</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/running.html">Run</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/embedding.html">Embed</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Servlets</div>
+</div>
+<div class="menuitem">
+<a href="../0.94/anttask.html">Ant Task</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.1.7', '../skin/')" id="menu_1.1.7Title" class="menutitle">Features</div>
+<div id="menu_1.1.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../0.94/output.html">Output Targets</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/intermediate.html">Intermediate Format</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/pdfencryption.html">PDF Encryption</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/pdfa.html">PDF/A</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/pdfx.html">PDF/X</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/graphics.html">Graphics</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/fonts.html">Fonts</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/hyphenation.html">Hyphenation</a>
+</div>
+<div class="menuitem">
+<a href="../0.94/extensions.html">Extensions</a>
+</div>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2">
+<a href="http://apachecon.com/2007/US/"><img border="0" title="ApacheCon US 2007 (Atlanta)" alt="ApacheCon US 2007 (Atlanta) - logo" src="http://www.apache.org/ads/ApacheCon/2007-usa-125x125.png" style="width: 125px;height: 125px;"></a>
+</div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="raw XML" class="xmllink">
+<a class="dida" href="servlets.xml"><img alt="XML - icon" src="../skin/images/xmldoc.gif" class="skin"><br>
+        XML</a>
+</div>
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="servlets.pdf"><img alt="PDF -icon" src="../skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<div class="trail">
+<text>Font size:</text> 
+	          &nbsp;<input value="Reset" class="resetfont" title="Reset text" onclick="ndeSetTextSize('reset'); return false;" type="button">      
+	          &nbsp;<input value="-a" class="smallerfont" title="Shrink text" onclick="ndeSetTextSize('decr'); return false;" type="button">
+	          &nbsp;<input value="+a" class="biggerfont" title="Enlarge text" onclick="ndeSetTextSize('incr'); return false;" type="button">
+</div>
+<h1>Servlets</h1>
+<h3>How to use Apache FOP in a Servlet</h3>
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#overview">Overview</a>
+</li>
+<li>
+<a href="#example-servlets">Example Servlets in the FOP distribution</a>
+</li>
+<li>
+<a href="#servlet">Create your own Servlet</a>
+<ul class="minitoc">
+<li>
+<a href="#minimal-servlet">A minimal Servlet</a>
+</li>
+<li>
+<a href="#xslt">Adding XSL tranformation (XSLT)</a>
+</li>
+<li>
+<a href="#cfg">Custom configuration</a>
+</li>
+<li>
+<a href="#performance">Improving performance</a>
+</li>
+<li>
+<a href="#uriresolver">Accessing resources in your web application</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#ie">Notes on Microsoft Internet Explorer</a>
+</li>
+<li>
+<a href="#servlet-engine">Servlet Engines</a>
+<ul class="minitoc">
+<li>
+<a href="#tomcat">Tomcat</a>
+</li>
+<li>
+<a href="#websphere">WebSphere 3.5</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#complex-usecases">Handling complex use cases</a>
+</li>
+</ul>
+</div>
+    
+<a name="N10014"></a><a name="overview"></a>
+<h2 class="underlined_10">Overview</h2>
+<div class="section">
+<p>
+        This page discusses topic all around using Apache FOP in a servlet environment.
+      </p>
+</div>
+    
+<a name="N1001E"></a><a name="example-servlets"></a>
+<h2 class="underlined_10">Example Servlets in the FOP distribution</h2>
+<div class="section">
+<p>
+        In the directory {fop-dir}/src/java/org/apache/fop/servlet, you'll find a working example
+        of a FOP-enabled servlet.
+      </p>
+<p>
+        The servlet is automatically built when you build Apache FOP using the supplied Ant script. After building 
+        the servlet, drop fop.war into the webapps directory of Apache Tomcat (or any other web container). Then, you can use 
+        URLs like the following to generate PDF files:
+      </p>
+<ul>
+        
+<li>http://localhost:8080/fop/fop?fo=/home/path/to/fofile.fo</li>
+        
+<li>http://localhost:8080/fop/fop?xml=/home/path/to/xmlfile.xml&amp;xsl=/home/path/to/xslfile.xsl</li>
+      
+</ul>
+<p></p>
+<p>The source code for the servlet can be found under {fop-dir}/src/java/org/apache/fop/servlet/FopServlet.java.</p>
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+        This example servlet should not be used on a public web server connected to the Internet as it does not contain
+        any measures to prevent Denial-of-Service-Attacks. It is provided as an example and as a starting point for
+        your own servlet.
+      </div>
+</div>
+</div>
+    
+<a name="N1003C"></a><a name="servlet"></a>
+<h2 class="underlined_10">Create your own Servlet</h2>
+<div class="section">
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+        This section assumes you are familiar with <a href="embedding.html">embedding FOP</a>.
+      </div>
+</div>
+<a name="N10049"></a><a name="minimal-servlet"></a>
+<h3 class="underlined_5">A minimal Servlet</h3>
+<p>
+          Here is a minimal code snippet to demonstrate the basics:
+        </p>
+<pre class="code">private FopFactory fopFactory = FopFactory.newInstance();
+private TransformerFactory tFactory = TransformerFactory.newInstance();
+        
+public void doGet(HttpServletRequest request,
+                   HttpServletResponse response) throws ServletException {
+    try {
+        response.setContentType("application/pdf");
+        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, response.getOutputStream());
+        Transformer transformer = tFactory.newTransformer();
+        Source src = new StreamSource("foo.fo");
+        Result res = new SAXResult(fop.getDefaultHandler());
+        transformer.transform(src, res);
+    } catch (Exception ex) {
+        throw new ServletException(ex);
+    }
+}</pre>
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+          There are numerous problems with the code snippet above.
+          Its purpose is only to demonstrate the basic concepts.
+          See below for details.
+        </div>
+</div>
+<a name="N1005A"></a><a name="xslt"></a>
+<h3 class="underlined_5">Adding XSL tranformation (XSLT)</h3>
+<p>
+          A common requirement is to transform an XML source to
+          XSL-FO using an XSL transformation. It is recommended to use
+          JAXP for this task. The following snippet shows the basic
+          code:
+        </p>
+<pre class="code">private FopFactory fopFactory = FopFactory.newInstance();
+private TransformerFactory tFactory = TransformerFactory.newInstance();
+
+public void init() throws ServletException {
+    //Optionally customize the FopFactory and TransformerFactory here
+}
+
+[..]
+
+    //Setup a buffer to obtain the content length
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+    //Setup FOP
+    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
+
+    //Setup Transformer
+    Source xsltSrc = new StreamSource(new File("foo-xml2fo.xsl"));
+    Transformer transformer = tFactory.newTransformer(xsltSrc);
+
+    //Make sure the XSL transformation's result is piped through to FOP
+    Result res = new SAXResult(fop.getDefaultHandler());
+
+    //Setup input
+    Source src = new StreamSource(new File("foo.xml"));
+
+    //Start the transformation and rendering process
+    transformer.transform(src, res);
+
+    //Prepare response
+    response.setContentType("application/pdf");
+    response.setContentLength(out.size());
+    
+    //Send content to Browser
+    response.getOutputStream().write(out.toByteArray());
+    response.getOutputStream().flush();</pre>
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+          Buffering the generated PDF in a ByteArrayOutputStream is done to avoid potential 
+          problems with the Acrobat Reader Plug-in in Microsoft Internet Explorer.
+        </div>
+</div>
+<p>
+          The <span class="codefrag">Source</span> instance used above is simply an
+          example.  If you have to read the XML from a string, supply
+          a <span class="codefrag">new StreamSource(new
+          StringReader(xmlstring))</span>. Constructing and reparsing
+          an XML string is generally less desirable than using a
+          SAXSource if you generate your XML.  You can alternatively
+          supply a DOMSource as well.  You may also use dynamically
+          generated XSL if you like.
+        </p>
+<p>
+          Because you have an explicit <span class="codefrag">Transformer</span> object, you can also use it to 
+          explicitely set parameters for the transformation run.
+        </p>
+<a name="N1007A"></a><a name="cfg"></a>
+<h3 class="underlined_5">Custom configuration</h3>
+<p>
+          You can easily set up your own FOUserAgent as demonstrated on the <a href="embedding.html">Embedding page</a>.
+        </p>
+<a name="N10088"></a><a name="performance"></a>
+<h3 class="underlined_5">Improving performance</h3>
+<p>
+          There are several options to consider:
+        </p>
+<ul>
+          
+<li>
+            Instead of java.io.ByteArrayOutputStream consider using the ByteArrayOutputStream
+            implementation from the <a class="external" href="http://jakarta.apache.org/commons/io/">Jakarta Commons IO project</a> which allocates less memory.
+            The full class name is: <span class="codefrag">org.apache.commons.io.output.ByteArrayOutputStream</span>
+          
+</li>
+          
+<li>
+            In certain cases it can help to write the generated PDF to a temporary file so
+            you can quickly reuse the file. This is especially useful, if Internet Explorer
+            calls the servlet multiple times with the same request or if you often generate
+            equal PDFs.
+          </li>
+        
+</ul>
+<p>
+          Of course, the 
+          <a href="embedding.html#performance">performance hints from the Embedding page</a>
+          apply here, too.
+        </p>
+<a name="N100A9"></a><a name="uriresolver"></a>
+<h3 class="underlined_5">Accessing resources in your web application</h3>
+<p>
+          Often, you will want to use resources (stylesheets, images etc.) which are bundled with
+          your web application. FOP provides a URIResolver implementation that lets you access
+          files via the Servlet's ServletContext. The class is called 
+          <span class="codefrag">org.apache.fop.servlet.ServletContextURIResolver</span>.
+        </p>
+<p>
+          Here's how to set it up in your servlet. Instantiate a new instance in the servlet's 
+          init() method:
+        </p>
+<pre class="code">
+    /** URIResolver for use by this servlet */
+    protected URIResolver uriResolver; 
+
+    public void init() throws ServletException {
+        this.uriResolver = new ServletContextURIResolver(getServletContext());
+        [..]
+    }</pre>
+<p>
+          The ServletContextURIResolver reacts on URIs beginning with "servlet-context:". If you
+          want to access an image in a subdirectory of your web application, you could, for
+          example, use: "servlet-context:/images/myimage.png". Don't forget the leading slash
+          after the colon!
+        </p>
+<p>
+          Further down, you can use the URIResolver for various things:
+        </p>
+<ul>
+          
+<li>
+            With the Transformer (JAXP/XSLT) so things like document() functions can resolver 
+            "servlet-context:" URIs.
+          </li>
+          
+<li>
+            With the FopFactory so every resource FOP loads can be loaded using a "servlet-context:"
+            URI.
+          </li>
+          
+<li>
+            You can the ServletContextURIResolver yourself in your servlet code to access
+            stylesheets or XML files bundled with your web application.
+          </li>
+        
+</ul>
+<p>
+          Here are some example snippets:
+        </p>
+<pre class="code">
+//Setting up the JAXP TransformerFactory
+this.transFactory = TransformerFactory.newInstance();
+this.transFactory.setURIResolver(this.uriResolver);
+
+[..]
+
+//Setting up the FOP factory
+this.fopFactory = FopFactory.newInstance();
+this.fopFactory.setURIResolver(this.uriResolver);
+
+[..]
+
+//The stylesheet for the JAXP Transfomer
+Source xsltSrc = this.uriResolver.resolve(
+    "servlet-context:/xslt/mystylesheet.xsl", null);
+Transformer transformer = this.transFactory.newTransformer(xsltSrc);
+transformer.setURIResolver(this.uriResolver);</pre>
+</div>
+    
+<a name="N100D7"></a><a name="ie"></a>
+<h2 class="underlined_10">Notes on Microsoft Internet Explorer</h2>
+<div class="section">
+<p>
+        Some versions of Internet Explorer will not automatically show the PDF or call the servlet multiple times.
+        These are well-known limitations of Internet Explorer and are not a problem of the servlet.
+        However, Internet Explorer can still be used to download the PDF so that it can be viewed later. 
+        Here are some suggestions in this context:
+      </p>
+<ul>
+        
+<li>
+          Use an URL ending in <span class="codefrag">.pdf</span>, like
+          <span class="codefrag">http://myserver/servlet/stuff.pdf</span>. Yes, the servlet can
+          be configured to handle this. If the URL has to contain parameters,
+          try to have <strong>both</strong> the base URL as well as the last parameter end in
+          <span class="codefrag">.pdf</span>, if necessary append a dummy parameter, like
+          <span class="codefrag">http://myserver/servlet/stuff.pdf?par1=a&amp;par2=b&amp;d=.pdf</span>. The
+          effect may depend on IEx version.
+        </li>
+        
+<li>
+          Give IEx the opportunity to cache. In particular, ensure the
+          server does not set any headers causing IEx not to cache the
+          content. This may be a real problem if the document is sent
+          over HTTPS, because most IEx installations will by default
+          <em>not</em> cache any content retrieved over HTTPS.
+          Setting the <span class="codefrag">Expires</span> header entry may help in
+          this case:<br> 
+<span class="codefrag">response.setDateHeader("Expires",
+          System.currentTimeMillis() + cacheExpiringDuration *
+          1000);</span>
+<br> Consult your server manual and the
+          relevant RFCs for further details on HTTP headers and
+          caching.
+        </li>
+        
+<li>
+          Cache in the server. It may help to include a parameter in
+          the URL which has a timestamp as the value min order to
+          decide whether a request is repeated. IEx is reported to
+          retrieve a document up to three times, but never more often.
+        </li>
+      
+</ul>
+</div>
+    
+<a name="N10108"></a><a name="servlet-engine"></a>
+<h2 class="underlined_10">Servlet Engines</h2>
+<div class="section">
+<p>
+        When using a servlet engine, there are potential CLASSPATH issues, and potential conflicts 
+        with existing XML/XSLT libraries. Servlet containers also often use their own classloaders 
+        for loading webapps, which can cause bugs and security problems.
+      </p>
+<a name="N10111"></a><a name="tomcat"></a>
+<h3 class="underlined_5">Tomcat</h3>
+<p>
+          Check Tomcat's documentation for detailed instructions about installing FOP and Cocoon.
+          There are known bugs that must be addressed, particularly for Tomcat 4.0.3.
+        </p>
+<a name="N1011B"></a><a name="websphere"></a>
+<h3 class="underlined_5">WebSphere 3.5</h3>
+<p>
+          Put a copy of a working parser in some directory where WebSphere can access it.
+          For example, if /usr/webapps/yourapp/servlets is the CLASSPATH for your servlets, 
+          copy the Xerces jar into it (any other directory would also be fine).
+          Do not add the jar to the servlet CLASSPATH, but add it to the CLASSPATH of the 
+          application server which contains your web application.
+          In the WebSphere administration console, click on the "environment" button in the 
+          "general" tab. In the "variable name" box, enter "CLASSPATH".
+          In the "value" box, enter the correct path to the parser jar file 
+          (/usr/webapps/yourapp/servlets/Xerces.jar in our example here).
+          Press "OK", then apply the change and restart the application server.
+        </p>
+</div>
+    
+<a name="N10126"></a><a name="complex-usecases"></a>
+<h2 class="underlined_10">Handling complex use cases</h2>
+<div class="section">
+<p>
+        Sometimes the requirements for a servlet get quite sophisticated: SQL data sources, 
+        multiple XSL transformations, merging of several datasources etc. In such a case 
+        consider using <a class="external" href="http://cocoon.apache.org/">Apache Cocoon</a> instead 
+        of a custom servlet to accomplish your goal.
+      </p>
+</div>
+  
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("<text>Last Published:</text> " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         1999-2007 The Apache Software Foundation.</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: xmlgraphics/site/deploy/fop/0.94/servlets.pdf
URL: http://svn.apache.org/viewvc/xmlgraphics/site/deploy/fop/0.94/servlets.pdf?rev=569118&view=auto
==============================================================================
--- xmlgraphics/site/deploy/fop/0.94/servlets.pdf (added)
+++ xmlgraphics/site/deploy/fop/0.94/servlets.pdf Thu Aug 23 12:00:37 2007
@@ -0,0 +1,886 @@
+%PDF-1.3
+%ª«¬­
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 1045 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[_/c#!&A@rkFND9Y<(92@OIMF\PB>M*D*6:m1d,4tgWUL&"\tT&Y67r?WQ4d1-c$$\bHgJ]m&kNX-\Kg3%krPUR*5f,r_!G:=:>c1e.2S7Pq4%!oRd]K1@T((cfO2E=61n+%47_4k>BSghg(#5"s\ejLT\VF.JSErW,<"o@Fsh.gWd6aPGPV#]"PG>1q2f'/mEOY2[CP=bF?;&-mXd2-f=`0>,EK.ZZ^!n+ck:SM6Y,%,.fB=*sR2@=Id=Y<UDcr*"KsCXqQq!4EpRp!-qjsTsd`o"=)Kb6a#tf3"^V5I/Bij8@]qSINNt/94:nXI!pPhm`"Q:aBC"%(Up/e\V[Z0A_fi<<mno[Z`]USC)^=#AsSaJ9W.2K7Dt<Z<%k!u-27I88E`Fp_Y!^bEKr1&O"1IuZWKjJ/>)K_fR!Lpd4RflE=qFu#q5GT>ekcUJNO9R7t5@6AndiKn`h.Qhi`NfL'2N&$%tTT8D'7U/I@I:GW&4dKa%JIrj.e'1=#&LAoSL^>Od?sRQR)]OWF,#-u9_+5W?i014V_jnJ$!A$on)"l`q.+V^0U;`EL8ObkSle&]NN$8:#h;.5Sb25B'-m-7bm:m!Sb`bPHSK$%H7A)E)14_tI)I1F3U\?J)F[3(\?tG$msLW`#e6]+9[7SUBEq]8;GTPpZMq<7Dim2.^_K+8(cS1LeM\^*'A8"BYE"W*IhiQ@DI>.7u=uXQW,2.l-:JjDn2#K]M^&d@u8GTP\Yp?8?2%b1jYWBZP.W:!ko`njT!_IbqGUdf*WQ&q\uqn<p7moRJ16eXqXk"nR**(%i`cbTY=D>d_8h!:N,V?2YjmH=&56FLn6YY.PVag(0ero$Nqo=0:r"^]hD+mjMP`q/"S1L5F9:o>V-k.BL3%Q`lhh3qn9('2YeBCS>$/#(Po0ZlZZ;`urjESY"(gLaeE*bQm#0kB_a!L+s3nQkATlYh7!"4gI6Ah8_$-js>/f4L9Y(F3csPHY9E
 i"G;ef:aL$Al7T-;3#di8fkM\j@[SPhN,(LOaMhgFMNL@&(IE7%iW~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 5 0 R
+/Annots 7 0 R
+>>
+endobj
+7 0 obj
+[
+8 0 R
+10 0 R
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+22 0 R
+24 0 R
+26 0 R
+28 0 R
+30 0 R
+32 0 R
+34 0 R
+35 0 R
+]
+endobj
+8 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 84.0 528.166 139.316 516.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 9 0 R
+/H /I
+>>
+endobj
+10 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 84.0 509.966 289.676 497.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 84.0 491.766 208.976 479.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 473.566 194.168 461.566 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 455.366 277.148 443.366 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 437.166 210.5 425.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 418.966 219.8 406.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 400.766 319.784 388.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 23 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 84.0 382.566 270.632 370.566 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 84.0 364.366 167.66 352.366 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 27 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 346.166 142.16 334.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 29 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 90.0 327.966 179.48 315.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 84.0 309.766 228.308 297.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+34 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+35 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+36 0 obj
+<< /Length 2198 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau0D=``=U&:W67i8gT>B4?r&Dg*rWkA]ESVb%QpWU9jV64t3"?q<nq-e&+Pj^g%i;NX,A1CfCS(OLVC^ruPt]_2g"&BgFoB9ofk;8\!8eF4@"H&bUtm2>NFq!3m%F5qk_(<iD!fSX,g`U;OVgR,aJ]p[3\c7BT)l?`__4m"iq%9_mk_^JR*o\udX`iM>HG$rQN*%uii"f:^<+cOD,O4h^%HNJ'FHe[q#2Vub.@;*E$m2D4sC?[3FM`?0dd<mOh6)U6V`%['[)/[MoTFI1/AMag@P+Y+72H`/$2l4`!_sf/=d2I#>rpXnEa:.SVr[bn(M5Z.8O_n['Z;b?LkmWWdVlAqW+UK^NlH,.NhV@WX:QQusgLJBGH)aH8_*D!D(Rn$slj&8rlVlfsm,Tj>4U^^ke0^-G&dYZ#&$^O=V/e*p&QPj@+/Zb(<IOu?s-dL2RK)b.2c[+<H/i?I(<t-GcNfnc[J:\qb>R>-5u-=:ienR4@c(O-W=_%Cf+kW/')%36b:Z3&(Q!qY,)_CXK<b?GHB(^>&<Aerpngq<Y@Ic=JS_aHa95B,efrS%U@4%:9UNNSdMu;*niW%:gT(`S:e$/_a#/(X&0e+&r+]Ak@SaQ[LE8E;/l[kdX`C`-LnDm@28O&U(-KpdUEPG'@,Fk'Psua-I!_a;_*#=OeNNDXh<V4/SjF*((dojS\BI?\H]C>piZrk7iRis!fQ0U35<o+$e4ep>0k$6A8eSP\c&^)X&g.^g&AcE=f/V@p;-lEd-67ko)F&W'=l>T#pOV665=2Co#RC90=&j]`RYcXk?`UKD%'76ZYQ0-%?)e_'>,B*[H*oO\"d?>jA?!9nQ0T(W;,RE\Ga_TUBsK*%bVX@VpSYXo@(#?%b@EG_QnnmcC/[M%a&&it[lBsZ';;e[Gj*+*MsC?aOce'8`D=Kno316]PpH#\U6Rg=@?(LUnF`5g>NcQplOqhEa:<!AKp$#RVSq"REPKLfYT9G+$KUd
 T`'IK=#8Co*CWO:0mE$^e]8V/n]'2Yb4sj?W>hX`r6GMhVITMfEe9_C5!iU&0hhQ+.@!XM9-V7r=BEl-`D:k;nonhKR!eKZ#c3d>lDWU;"a.-4DF[-F?n^+H'+FlU6(i*@e>(hOH.G&<eX)"T4nO*G+7bcF;A"%<O$#YF(!`>SLWs9>t%*BAu4'DDt1+9^O(7aEn'[=Z*2s-Pi?%pu_H2Sj#]\F3I=20M)XgpU)?1d:)$aCGVMg-g/acd+?]Vog97cNF-Wd+046oFLHU/T2B[?WJT#?DH^gjrgX2FW>d?h'l=8nG.NQ<hC4W75LVG+%bhe0IfG1i155VmhnM%.L8.>#@J(f&o5)J(QWqVB2EsE:Pm'[Tm[aD\G4::ILFW?k7:cN1UCL3rL;>SctdA+$:/%O&6u&HNr<%_h&s8p:V`b&KMKH#4.c@'=V&]D.ueT_UF<F\NANcJj%%/U!sq^q\$\DC;=)?RhPsnep[,k[n/]IM8].MSZLDRD_*gQ(oY<_"LEO&nQT'K)hJ')33/5FUe;[*T^R5p8UpdnnA`cKgaY>+Y;T7]o"Z&U/^f?/gFLmTip@%NM\dENmhDYX5#^ZUXO*GKqOlCA.8m4Wa#495V[ko;<Xj?A&`dN39:W3k?Mlp0KaOEqABL,9'5JJ<-tdFYST&(!$FQs1X'n(8$9RM6N`cDQ=JtULJHK,:f>7XGop\I>aZRW"#&[+DOfGLaoR!FcXXn]GUN-n!+E/kJCueN.f]qo:mZWQ]+Y>D=?l=bB9=ITN0GdlH!bf*PgG^X'gBnC'<6GTWQYYGB+EV\JOgu9<,U=&8)mBFj,&qsQHiD4@[>G#JHiDOjo7CU$F<.>/%aM/98T@:GRP`C&Kl/P<hlCo_[n=ZX-rt7TFaNflm`Aa<HkKdFU9')$76C$emj&5dY-&"PhKDD'>fn%\7pn7Bbj@DgIU/mX3K-&Z2g:D*4,iW/^?rD.c/F[M=RYnigMhX(Ab@mf*C.
 &NIkM<]7J.!KAnZ,GpGj)`)6_rD,$kXbk4/#q?tJqu6,dk`ppjEr4HC?kd=h5(3P6d#C\"KbEGG<fmmA'mhpk=C4ZIu#N>Qb'J`$"tfKIa]5$TPqn2#e%lk?2?,i<Sra?gJnirEgCUE-9+S]D<[E+o*uGaMUg%t>+nD!cJ_nH\cH&he4i(^tel4i#jLaf=:p)W64ScO6OtBrIX@"rmLG@dre>~>
+endstream
+endobj
+37 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 36 0 R
+/Annots 38 0 R
+>>
+endobj
+38 0 obj
+[
+39 0 R
+40 0 R
+41 0 R
+]
+endobj
+39 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 231.872 279.578 284.096 271.578 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (embedding.html)
+/S /URI >>
+/H /I
+>>
+endobj
+40 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+41 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+42 0 obj
+<< /Length 1962 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GauHL>Ar7S'RnB3&Gi[8BP<MPFm6,co\qLBZ=Jq:!n>13gU&P3Q;iaaA]+NE%RnL6/1ScqD$b$:Pg5QWnf>E8*PIp_I6GHm#!VL:!eO[tpO2h6IL+i/bk"ZlH]I%0iomkHf2!#e`fQ)hT6HDn".)##$Et<Xoc(],j+r[NIe2THa!)Z6O`0`]9HseSE+?=?Ebi'fpr<jkC=?f=E-5bSkL8rX02A$9hc9QoCNK#EDgrZYAM,$#`p\FgIXI:EpmXArAXpjT?(>97qu,gIo]:r$fpR9@bL;?s&;<f9'>,lHMPCWIQ^'*OGqB2\GOskjao(5?"7eoe018[5l";3cb&o=[>]f7&gSU[Y1mBp9.%):m8VF=G-!oc"=RqJT.@+!X^q3faUGV65pr,;?d5lb3.Lnt)"BsSN?<4&l3.\u=+n"\de'6E?.Gql$lPS2;a4VrmQAu;r,=J#/0H>rCf5kNobFV0j?BL+6(.F$:#Q7^oY`.[agF_U/n*ZOTO@c$dS,@_ad]NMUC<FC!q+VjMXiTtN]YVR(b2lsP]]O+`3/CDpm55s)0(U;%"oS[Jnj5fD(]N@EYCC]K%_#HT7^`6>8(=4RWCqi$_I5m;1EB;%p]0RTBi8mfOA^g8<)[5\Lj]IZ,NNk(aY_XO)/N7iXY44u:UTA7bp@kio,`c;`duV<ijS%[[QEql4W=&,Y?11aFob!-Uobb=P<Rk+haFN1etf`QRnT4`%P)Y^.5K4>*q>__\)fs,+2[=,Nm1!n6)s'Ig$KIt?_i'^m+`n-gTBPf+CF7]@o[,4;/g6*>3*.4FmF*_$E?LVQNh_Egs!+s_2t(/f.4R6>slPnO!qDlb@G>PR&N2#%6^l)q)D199$f,_@N?eAm84K=ep;GWAXoQRA,TdU`a0V(7e5">)NRNJOb\ad_V&[hA=IIbF8_#*%[9^g3TI!V2;<3Fe4eCQ1D)qZF<<gsoLV;Jj:d@J2B>8)mP+\N@F#>T^]^o45m[u
 ;U>=iNoq8+JW.@76[5l*Zn$YfXR:ik\R2-//[7USZnP%Zs_Mj.rK/!GQi,s*LGdM:VY_<TIolPN5XfJaO1-M5oP_MVu.Y';<JbA:#U>KjPi5uKk>Odta_90ub%qdh&#LV7:6-iPNq8JFZ1K.hTV\&J`1C)$+DY#rRSYET\mP1ZgNTl)>>9-c3mfKR)E\QjSO$jD1,FGmB,8=!ERjMBrjAslmVV=o@f[PXWXk7@AK<s_uLfHEO#SOLld)lm>j;WVi+B(J$`K9Rlg3CtH,/;[*>,7"+7rS!0eZFucOc#3nOFg12TKIm"it/;H94!DdFrT+ua^n0[Vl=+_Z79G"9E*kHcmOh]5jIt=WB6fm-NQ\i#*7\%O(#!ebnH]\qJ8%8"+\jgGKj]1bX6Ao\Z"*Fh>i^_fD,K:9/^6B1c)+hA$_<gCno^j72^[X"Z=H8IZXJ$M"nfVR1,LK["_Zn(0c(:_G#l3#pNp((XpPX)\Io4o%Maof-a5/g(C.fS@)/5PjZeV(1Lrt6(@"l;r<"kb3OO@q=SW"PI)23:[`KV=m$(#^9C=D=s$5,hZs2#gtPpe-J/F%e"slLr5BY*.l!@D)?V#F<k$HuN1(t$-JZPL=!RrVRHst0DRT7,)iI!!%6XLe:X`LW$ZjF'eg+Cl&p6a"!M]ku8EbK>$\skK6P+G$nV.,Q+Ks7"`^5]UFT6;M$Frup88++5*j<YO]I^25I>W!5IGaiA!`OuT^UN8rn00cc[XAHnV=e67CP.-:[]8EZN@s%nLI-8B/dc:)[J?"q[5M@Y9VqsT3]]M\J;Ombc0L:bn!<o2$6+tgTYmLS2)*-@K_;33Cul^8'F#$<X*@QQ`?7ECi"P;+1K<,D'gs4('[2q,#n3dU.thsd%3U>8>;HWPh?=K<29+/cMhg`sXGE2]U$D;)3=5=65@dCBY^Q>WQ*PWlR6Xkl6sOPlAVoE8&^&()!m*Cc*:u0`ANB#~>
+endstream
+endobj
+43 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 42 0 R
+/Annots 44 0 R
+>>
+endobj
+44 0 obj
+[
+45 0 R
+46 0 R
+]
+endobj
+45 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+46 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+47 0 obj
+<< /Length 2920 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm>>B?9)(4Q"]i,,$bUeNeW-Mq=dii,Ttj%Sg=b1(_Zg8H;Pi>-*;H[l!c"p(V6@$6tSCa$amcMc>be_SpU]<gs=eCqabY@dk\[cRBMr-!Ju^Ya9r9cQC)8ngGYrGd#R+p"GkTlg4F9men(4j,/QFTSFI"1ViDjj'=pnB8#d":$k2%`5uj%P;G5#C"oY]+N5@s3qB5M=5Ea[I-rY5NelEMEIpbWMFj,B1ce$UWdmrIt+'AMH'-GjSeoQX8>uuIV&K0])->tjDY`d/^hVWXir],X>dkq)4sDNg2KF@_t@#t5?>([`+1$bc:GO;<&_37C3?RL.8h`1Gq<GO>;9-,orR4c=c2AgBk^+?YQB*>eC@l4FYKr0^^%"Os5;FG?<]pjhUX:d[@Y,"OhbuXmB/D+%t5E!e"A)<'RkRSq_BT2iDD7M#nIt)8rmdid!CX&'44uLI9]Vh=*?qIOO.k3qg5L,>JkdV&Z('/^!\OW:N#pX43DP"+*37QdX&#%!h6Dp$g+mnlRhU)[&q\,l'0dPY!%\=jJ8Qm\4:r/\&Q%[[p*"Tfa\XLH#<-=jmZk01Kb&22oDcD^K_:fibZ+?_e#Gb38bBK2-b(j%.S*g\&1;g1#cEu3ltloTNc",ON8-04iV5$UWR-N:CB&8p`d[H(PZ8$Uu&f$$L)=^[i>2J52i(25/i%Uj]_lb!K'aB8Ta.o;j$.;/BJK!H\\mZZs2akc?_*.GB&&/Kg.aCSidOXpqB==S(D3s(O/b(,^_uoB9a*4K^;Z>f\>C/5KIQb<H21fcfe5:3r(&Z6V3AB[_qcZ?4UuJi\2#G&2]joB7BgOEHnfAo@+%5_eH5a*O&VCF/<us^IF[AKrN1GiMk#:o%ZXWjQ"U,g1YE<EI[NkE,GdHrqn3>>#BA`=n%mg.\*^gPA2j$(YobOA-'E)P`afHgL(C*U9$hVcWI^mFZL5j16Gr`-F1Kk/uuJrOK@*,QrQ;4@^s(ar7XS_c[%[
 P]H'7#4=Y9&=BEJ##V6EJ;5F2F8L#d^89ASS'd"]%FWu4Eb?o-NNJ/1Y>fe7Zj.$GbR8c1)QCK]1Gb3QY!B/8l8E7d5b!\8iHMc)Hlsu8+nM`HGEB6#T@WEb>dE&a?dEQE',]OO!Ks]<MD$W.0n@L2><c.F`mH;*\oO0F)cnT86n@+A+lPWPi?9b]CD_G)OETQI"1;cM[8IKk'OO]GQ,*`^N-qHV>R4>-rr?3G-,]Qt"6a)&4a-l-K/e#MMAh@5B3%,3meWmud($=h!]W94#(HcDOR&#+s9t8LN=-$CDJGm,<o3oC7\-ut5-g5api[sRY0(k&W4:]<RfL'8>WbXCRn[48"kI)()I,_9bl,?ola<)#6p!',5C0^2\ARm"B2_o6-ZC-<sFfOp,7gn&mkB\Lc7q4TtDW]XrB]ao$PQ[Xf$E!?$n*p39M71,7=HD$MCSb/rmBOC_oXMt_n'_NPfec-DX`u(!d`-?diiN7C@o+"s6\ip=p1j8r8?G5F3eQHaGlU:Z^6hho!-d8'b:+6g5:I#A#G]<SZ>=P?Mr[*i<"<$dk3gs!EhN8R_rHsb`pPXP<=TG"Pk0?'/TGLFD^p%ZUB-8G6C3gL\o:!8WF?^)hY*hD1]/+<Sq#gNc^;2g!1Iar'82pl+!:lLiA*o_mr*1W,gOL>92$_uljRBgl5;9s]kHK&Y_mXFl3U[l:ejI`hOJh?Uh2;7%[[=M\DVQ@q8:"3%V>U0T;rh3/e\1CnP,6?X;>b"MA@gL(2aRp3!Kh#K_PCicsE]C'Ii]-:X^Y>f.&Z;Q<FbtW^Zn?K8q,'k/sAJPT!)T;BKdWlSE.K=U3-Of74'8:f!]VY#)$o7-[%>e`5IR@<Xi3Kged%mc+SD)SjFa8'mr,M)(Ec'Y8PbN/IKQcLbtE,a4&oXi0O-7Z"p:0WH'bp=lDI<6pK:$($u?+pnqL-&L@Fe-.CA9$LT]>HY/go4Hic?!eJ)>T)fWWfn&f!'XG?7"o
 K9B4td!gWQC[mLmcilqF+$l,:_(@7%G7>3)M.d0-t=n[aU%JGEL0HQ>W6oGDl=Ii(>'N`etaO"`E;I#[($Rl8!H<?\-ih!b:Z!YF`VGbploR_n>88Mq_1%(CupPG`Ptikj@5j&B'ClMGD]^C/)(Q&uEMr*IPREQ#K9m'`@$Q-;uj!a4r<NCOTeOD8gJAPP4LM&XAcJgI(QY=CXTXJ"'S:kN"<k?UT`*<OKl]CBqoG^r4LcOQ@9*Qs[:MruaN[g(8&6,NK_Z['X+"a>VjVgY)7+6^Hd-Xc>G7Fit39a$"=4BN74/C^`L;'L/:@;`2*,>O[d?fo$+P`J+=PO[lUs7E*XUE:CF8"A#):bM<F"6tq4*JZO7mE5k0Ue%1$?[g&nZiog&"D^9Y0rV#E[25)H#]XRG?@<jODBR>j_E?`*gE%tqH2cf8bj:G\d-il&&,!ET."^^+fUPQ:22A'=mq"tj7pY%M5+mpBk_$?oqOi_^a;d6_m7pACT=Df!?r+LKV5>4`kBL:=JJL.f4S]gAW-^[bCuuS_Qn]qHH@K8#B:*Q1;Q:)M$n6i6*]-haoJ[IIa3h\]p\fk.gE_%?14/tQmnVUioc[L"9-BRqW4BY<N)!:CdE2YdN$c/$^O5eXW[A$6jif=-C6-+QKNY4AEIhetef<DjgI$p4bPgLA4nYJrFB[P0UXd*j`pm+$[h;JODVZ.H&pQUiUR_%rlmgD?iAqOPhT6tHbmSP3pkUAV@F=mhXf*jH#5V.CR)Oo?TD!*7eM&M(nj-Dl(rbk7OD1iPG!H,tQt0#G4lcEXHGTZ4*U[&+S,V?%s1,+ZDcdR40EC7u/eYDgUDC_?.X7mYl6[#-\-nH@Ns:Xq7_ftT_h*#95h[.fcboEeA)6*l'?EX^0EqnGpU#-hpW#(:V2D_u(JebN.n'L'=*8B^O'R::/d<9n+-_=TD?~>
+endstream
+endobj
+48 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 47 0 R
+/Annots 49 0 R
+>>
+endobj
+49 0 obj
+[
+50 0 R
+51 0 R
+52 0 R
+53 0 R
+54 0 R
+]
+endobj
+50 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 409.944 411.137 490.932 399.137 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (embedding.html)
+/S /URI >>
+/H /I
+>>
+endobj
+51 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 212.328 323.984 350.64 311.984 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://jakarta.apache.org/commons/io/)
+/S /URI >>
+/H /I
+>>
+endobj
+52 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 142.644 247.984 357.6 235.984 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (embedding.html#performance)
+/S /URI >>
+/H /I
+>>
+endobj
+53 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+54 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+55 0 obj
+<< /Length 1992 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm<9lo&I&A@C2Ydm0I`"9b'\^Npo`/-9Alc/3HSL=`#Jg=)^Jg!D&Skf<4QQdh/,gq_,:*p_W&A[_O^>0%.S;gk$7c-\b>/UA!UX10m'a+R8on!JKSpS1=_SE1=[2Aj#H?oAaP=sf-c"jZ9aPKXti?,J]WUP(=He'aW5*+U,MEM\ef"'hq0K.eWX_p\4T*:FiOeV$M7/_gg^?9WmVcU>FP=5.M'gfoo9Ol1dB<30_[`&V50.3iN/%K(Y4(5&8,*hcir(QkG9Q'Xrilq7.c/,ktg*H/SgUCu3;E&]dh[k)bX'/`FK-/uQl9IIm7,<EI&W%^l4Jin%g[jXS@bMf0i.NBFgS:,uHNjZYp<LJ25@/bKJnMQod[_nK)RWtaZ+/E3Eg$jd;K1i[B+sC7Ba>/>3,K*R.kXsKg%#_rl720^J*^CgT)ok'>-hOGBqjeIne<[:%VY<!`OEpJS(<SNG6od2apUB'f>6%fBtF6k+qAJaD?(j$=?ZC+rRcjo\_GHCOR,^dkNCk_PNHOgp\a@h!+c<:Juaq+1Eg+O;1ao"'_6aS(GL=JmeX_)hbi1"iNOC\=hdk>30B"4*)QtgTTKC^VaZ^`CYcBmj[Q_NW3A<YgANXq?tQU$/:c:O^73fpJ>;eaSJ&F'0MW6-OBjTH36gLV5X%G97+@-+>!Y":l5k4g>)4ldZ3=F0/0S]e-Jk=)\<QJD>GAs"U8l&tik3JP)@"VroQom-KQ^ZDJNMQ\.OOuimX^VA)WUdR(Jgl9_AXe;,<KKg?5huVZ<3cPNE6aJN%m9M))$I&2;e,KZnq`fY$`/OABD<upu*H7;d/)0^%#oHI2c6:Y6CL.IYs%HUM)le]I5%C<t4>Qj$,fFWN@M#SZdM[X>!>><H01t`#P7/+2<0ml$Dpbk5>^T,JaoX7OOLNAJiUdc<5-`c;o(M1f5_,J?AOtRJCLY:[%&-Em/;T7?C$u$u@[^$-n'9^-;V\,qgq3!ub\%(q=d
 .H<aNR0O4U'NBlUqEX8`M1Z-s;_0ptTj?\X"&%Nac]h%`7!.>h_(Ja-=4C(@o56n/7:TPR2Q4tl;H1On8LD.]@'-!Lr@=f<d5%A'>=Au,Di,bjZ*bPGM&+:)L;HO$lB3d&EI#)A`qnDu(qU1rC!bY<"7S0AS\06*W>,j'Fi?BjHnG*$JUFtI."%nX&0I5LbK!_'b]#7[=D)/Y1;RQV`8\Pg11aG>U[&.%Up[(Q,"(0u<rCE^*At!?-Yt-r_Q[itc;O<"_-Q_QWFsGljO[$&^JX_Xmn.+R>d%Wc^l4.R@p)WE1O.MADS#\U#rr@XIGCAi1$>7Ijr,`SM0&2tr7tPIDo)BI_#HH$*Hl+`]pPI@)MC(+fN6Vq9\"^oq1-[7@mA?IN>ik9G=$"jT4-@XS.d;ZZcu5Xnm<m\:p)Va4^,mV3RXIH^BdX5Z4F)r>.<Upc!UKM+:r&OJUGK9\o?\)%(_@m)V0N<`O9*iY;9*93m=[`m>_X"*ju=ee87l`VZtk"Zq>LF3eU\+QLGZ!?i%%c]XoRUa^kM%G?((4t*tTpl7[1c%n-c^H%t:Fl"55'XJ\ccoV3+-D*UGR8Kte.HaIscrms?Z)qN,2RieREdH"3'TJ5hn6&DqXP_Ec_n/CU_QUR1"Enf/!G&n`'t@ch;JX=^S^>p;qg0$P"2F7o[p36J0)),L(!f9o<l8h/;[#o"JC42armhQe[os'!4o"DdBeQ*L7*nAW@e?qV/*rE**JOg3]sZH%/*V"26+*ohqoJ'5<\+F\d.jb?)9dKfrVMW(.]>f:rk\`u&@q0R_0]_',ET,3Qa\OmTs'bTnj(*JAt?[$4sKgcjF#4Am,g-?cfdEZXp%Bsa#Z&\O\%coD05*B3PY7I;-VIACb@iq,i8Lm=FO<o;H"kI[aB!2KI6hbjuJJ(F6G:OH<?f"c&m`V2JISn*V$YS5NaTNh`*"^0l80'BClI*R>b49!s\]_=%'pkCH&L?3b7!Q,25Y7
 S]JGoR)XcuQ~>
+endstream
+endobj
+56 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 55 0 R
+/Annots 57 0 R
+>>
+endobj
+57 0 obj
+[
+58 0 R
+59 0 R
+]
+endobj
+58 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+59 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+60 0 obj
+<< /Length 2571 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm=D/\/u')q<+623f_hk_iDq49rMUe[HPOJ6WoU,eb4_hqVhCacHt>Y=_)^YtYA6]mZ:'L="lg6[)1AtGF<:\0M=o8C@9*,?#`5?rl3fiAXenEL/h]`,]pLBX!0f&G\uMkB,JZWl=-W`AZ@KjF/QiLaU;4+5BUgU$$Hlb?Nu<$(,k\iR]_n#eESUh9Ss8#^)",k+0p[eQh,Y@V-?Po'B@e%G]s2C\JL;7VgMk4Q.T5AU7:&D/uM9SIUP(.YL2&"NO;%K=J(fWI1.bj2Y5]thK0@=J7SWIL$*1<nEMlLpD9j:Z@b+AbJp@CtXd)8S:n=ZG4.$5l#*.\F?$%o0TPN7kn9c*gE%e9e0-eQXBFX>&aNF[dE*p6^3$6SHc8AFU!gXqQg6RWHK\c0ao>^Y%6J8K>K;f;6K[1TLJf&c"2G'K/LhT2u-27Qn<p`VA[4li]f>:2$ntJ9dloI[Umeh`E<X!2(>g]<f[IRE[OJE1DHh*o0/i>)6W[8$(]9B%cr<jKqSpAjgbS#ql\hfCrG7#?:=OY]D%MKu6'plm_LB/e_A%!]ra8G!nOAIpA;omF)nCrRba[GL]RLQ\Smg8;%W<fspnkY&W<Sn)02?=a[]+F"S<ILdgqGK_IM#T3SL/@Rg#!i]`O7!a0@hWRV[as3L-UqZfrpJF(P+ARllF++?jPp*"i)'?,`K0.-lF:fY,ud\b5e1D,M$82_)."rbu<:!-.;:WpC![@Fb0E@.u[Osl-,AaiUi+EAaa7Z&K/ER[4EgI".:AO-TWR"8LcU@Ep724`la!!gt)JHS`g.#>5E.#I;t>%DY8*hDB[V+Sl^>`P*cfNe1j<Ejae5/<9#3;kh/hqc&anl?Mn2f9AUA&N\-?5Sej'gi@k6])Q<K#G]%PaOO`3#G50^m<cN1=fd#c?'UH5sTW&gddIT\e"\TkZ$t)8PY]a3$]WD6R]I2`Xo*AA3Q=IS1"M(o&uM1+*X]M`H1^3B<uQeXbd6
 %ItUi/+u_:3]r5ZK3dc?6?/'7h$UO8&+@.aggNQKKI]TAl\@QLa\u]idfT!/-$7!#2.CB@gkNQ%H!jG7SLT?3rIap['SD_46-_@Ke#LgF<FUc@iJ:I25*S\"EY5`VsK6gtYB9+!.VZpsMPUBIG*,dZtD+.dj\/(G?8/uE5ah>J<r-WjDN5&9SfN"nZ1X;@#$EFRea$`kBE[4EnR7<,R\28TKS7h*.K-Qq*Tr2YC&[XJR81>0Ip]Ap*GnIE'5#:bq/!o;,Gbd6eP_E(jLJ=4R-441'^&`1?U>-s?`$fVNDV,1-\TTX3''EdVT@,"WZ.;R9Ufcm!7T(?@7f'0M`<<GZ-u:$!Qe2Ut$0YQk-Djt,0%gjT7SLY35/pAiYFKR<fk;f>QH/&eU,-g]@oqW@7BM(b(iDRN&cB8G_gFCVV"=s.$sL%4q)Zc]H+fe'fIV'50X0Iui1UDE0onK<ZLlk>rpoXcX-lPhOio`R?9=Ek*-gk+&uROEMC-_smQrjC:X(VmQ9H#-@ADm*)i:4H.'4&L:3olB)h<+CPLGP_WYde9WV#?%g\^l[\+>XtF@AdV9@E4K)-&bgV26&o?_aI\Z_5k>O;\hbnhD^EZ%)T2e*P9VVg8<//6uoi^b22\6/)t"FIX(\!'>"(>(`[XYNgWR-I?TFR2VmtRRBV%FZK%s9rgEF[=_^Lmt\#+aDthD0W5^&ja,!)4Wo:?8V>D+]`j6JG78sZB7:\?;<HfR>AY$^rl1mg7i"(%(F;9:T+*7k`Q[S5],pQM&lCcE[a&SmE3k\Kf:bgo,<L)5Y:FJ08qa&cOCY(^(gSJ@g0?0Cc@Kg9:CqLBleR4)DcEIrVY)?Q'>p^ZirQZk;il\+f:2i-,0"F%VY1YO&S\&,9.2.q\O8.=qp=\D_FP\N\n=RubWQ=u%cJ%>^OmUuqYq]TpH+ha>iu'WE!.*GF7r`n3e561lA?Zi"@a?G(pm7hLXC\DH(oK'WbOE&kb.QL![[
 >-0i_9%M=qSYK>]1nZlH#Q7r1mtO[uJq(:jl4kdMB5ne#WAXQ#sQi&WRm[ke6V_ImGRB5M[Z<F#TPkiPb;eu<ZI#_*G&Si.A7_69^u5gK?QFb3+3IgTZVW^%KM1lRiLe.d3,J[Wa:d!CX18sL88'bX!R@ClU/HalO_H&!/u;%*U&KW[^%>5H>Sqi-tm=:L9--3t`O>/Ln;dYVD[3Cg-LBb"MVlB+A=+#]BOrb[MujDG;F_!'tc'B?^R*ul1Dpmf<o&Oo)_/>3<"Z:GLZ#O)S\iArUm!>)rDWQsd,k5/,Y]OJHFiZs0N9Qk$7CC-8kaO"6<(>l'u)u$?$EXr>E=Q&(,Ep+1AD!I/,4@op+Gm)"GF$^k5f.GiP%j0"?[B<$MIG2[%lNpHn]&QfoeI#afhi<8(\.o&S3]q;]E.:Q$Lt$rs)LL-\$iQB1CrU7:>'55QS6Q%!6ec'9N>707q0-:RWtL.<%cQuZ!"%lA%:9-%!^HPFa46'3iO[)48Y,RNGIR62;/HtPpT+67RPA@Eq<b>S4>bB,`C&"f\\j$?Y>>gb%f%j=ELX'Rq*Rso9[j;%V:W&=g<Fp_r?(Ut-oM~>
+endstream
+endobj
+61 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 60 0 R
+/Annots 62 0 R
+>>
+endobj
+62 0 obj
+[
+63 0 R
+64 0 R
+]
+endobj
+63 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+64 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+65 0 obj
+<< /Length 932 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat%!a_oie&A@rkLn#HXTgXbNV;.NJ:,a:em6cE4#=bR:("u"&:&O`+D'bIc5mtSnL)N7iR<^U"fIT4&(AA2g1AG3/35n(=U'RnQMW&js0[,WAk\bCH\G0ELD\XJE3GipI^Ye+iO.]ok89*]H[&MFHALj"2l4ff:d"chg?c"O@74GA3A*NBgnfHk_BNsjER_=:X&%;KjV:"/%<2nAlL/?Cn)>pT[+%=_kkda[`a!nG)f1Kdpc',1]-Z?)#EXC)WdH:%ai.;*<.6*u%*bKc#OliC`**^osCV\=e.!&p7#@""@'TEc3QNjGYaN7Y+7+b=d3BoaJ4GX2jOV@.Q+A`hrjtLV_$pE<u]ls2Z/bO?l0+K)EK^]8`4eeI_4eW0,#cS4QJ,/IENH4T<bbAb`'HqFD9n$N@\GhHIk_K4OnV8)`bD5T=9dNM28UVl19&B"E,qE+;a(<j^1(s0[J.Cs5jr/b\*,+08H(dr67CbRjlg(%Df%:>iie)\Ghi7oAI;+RF`6WQC7MNmQS@<8=e0n10LnX,,1P:l@RgGb@\^>u>6ocVR;KB@kUlM67\anORq28tQFQ@2>f#?2\#^bBKEcpN"ED/YbFHfb?,K9s;Yp@+.V[u&.&P!QC"7Z2'Q^n+DNZQPnd)f.h::*qd/Z?qYgK(,\r+B>'9j!?W7uI'J%K\[C4C^7P,YL2`rMf7SZtZDJiso)k@NQ/`F&?]t`V/D>\eWk5do<LVfeh!gZl][0G,fhT:"HBXV&_o;6&<juOHTYXRZ))C%e*UV+h$6kp`/mEluGX6fJWJBC3&khHGZ=K,P\Y`L+MLIi=SLOmSG/-pkcjB%&M=m-Oja5<m6(@)3NdZHD%doR?Ck=g4d.kI@df#frM1>-S7q>a>"/d\hP;sF(<pFc[2b9%)-M&O_QFn+P`p>gGQ*G'D)OtO3iI~>
+endstream
+endobj
+66 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 65 0 R
+/Annots 67 0 R
+>>
+endobj
+67 0 obj
+[
+68 0 R
+69 0 R
+70 0 R
+71 0 R
+]
+endobj
+68 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 493.572 571.066 530.22 559.066 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://cocoon.apache.org/)
+/S /URI >>
+/H /I
+>>
+endobj
+69 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 72.0 557.866 109.332 545.866 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://cocoon.apache.org/)
+/S /URI >>
+/H /I
+>>
+endobj
+70 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 232.25 683.0 361.75 673.0 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+71 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 221.685 671.75 372.315 661.75 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlgraphics.apache.org/fop/)
+/S /URI >>
+/H /I
+>>
+endobj
+73 0 obj
+<<
+ /Title (\376\377\0\61\0\40\0\117\0\166\0\145\0\162\0\166\0\151\0\145\0\167)
+ /Parent 72 0 R
+ /Next 74 0 R
+ /A 9 0 R
+>> endobj
+74 0 obj
+<<
+ /Title (\376\377\0\62\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145\0\40\0\123\0\145\0\162\0\166\0\154\0\145\0\164\0\163\0\40\0\151\0\156\0\40\0\164\0\150\0\145\0\40\0\106\0\117\0\120\0\40\0\144\0\151\0\163\0\164\0\162\0\151\0\142\0\165\0\164\0\151\0\157\0\156)
+ /Parent 72 0 R
+ /Prev 73 0 R
+ /Next 75 0 R
+ /A 11 0 R
+>> endobj
+75 0 obj
+<<
+ /Title (\376\377\0\63\0\40\0\103\0\162\0\145\0\141\0\164\0\145\0\40\0\171\0\157\0\165\0\162\0\40\0\157\0\167\0\156\0\40\0\123\0\145\0\162\0\166\0\154\0\145\0\164)
+ /Parent 72 0 R
+ /First 76 0 R
+ /Last 80 0 R
+ /Prev 74 0 R
+ /Next 81 0 R
+ /Count -5
+ /A 13 0 R
+>> endobj
+76 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\61\0\40\0\101\0\40\0\155\0\151\0\156\0\151\0\155\0\141\0\154\0\40\0\123\0\145\0\162\0\166\0\154\0\145\0\164)
+ /Parent 75 0 R
+ /Next 77 0 R
+ /A 15 0 R
+>> endobj
+77 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\62\0\40\0\101\0\144\0\144\0\151\0\156\0\147\0\40\0\130\0\123\0\114\0\40\0\164\0\162\0\141\0\156\0\146\0\157\0\162\0\155\0\141\0\164\0\151\0\157\0\156\0\40\0\50\0\130\0\123\0\114\0\124\0\51)
+ /Parent 75 0 R
+ /Prev 76 0 R
+ /Next 78 0 R
+ /A 17 0 R
+>> endobj
+78 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\63\0\40\0\103\0\165\0\163\0\164\0\157\0\155\0\40\0\143\0\157\0\156\0\146\0\151\0\147\0\165\0\162\0\141\0\164\0\151\0\157\0\156)
+ /Parent 75 0 R
+ /Prev 77 0 R
+ /Next 79 0 R
+ /A 19 0 R
+>> endobj
+79 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\64\0\40\0\111\0\155\0\160\0\162\0\157\0\166\0\151\0\156\0\147\0\40\0\160\0\145\0\162\0\146\0\157\0\162\0\155\0\141\0\156\0\143\0\145)
+ /Parent 75 0 R
+ /Prev 78 0 R
+ /Next 80 0 R
+ /A 21 0 R
+>> endobj
+80 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\65\0\40\0\101\0\143\0\143\0\145\0\163\0\163\0\151\0\156\0\147\0\40\0\162\0\145\0\163\0\157\0\165\0\162\0\143\0\145\0\163\0\40\0\151\0\156\0\40\0\171\0\157\0\165\0\162\0\40\0\167\0\145\0\142\0\40\0\141\0\160\0\160\0\154\0\151\0\143\0\141\0\164\0\151\0\157\0\156)
+ /Parent 75 0 R
+ /Prev 79 0 R
+ /A 23 0 R
+>> endobj
+81 0 obj
+<<
+ /Title (\376\377\0\64\0\40\0\116\0\157\0\164\0\145\0\163\0\40\0\157\0\156\0\40\0\115\0\151\0\143\0\162\0\157\0\163\0\157\0\146\0\164\0\40\0\111\0\156\0\164\0\145\0\162\0\156\0\145\0\164\0\40\0\105\0\170\0\160\0\154\0\157\0\162\0\145\0\162)
+ /Parent 72 0 R
+ /Prev 75 0 R
+ /Next 82 0 R
+ /A 25 0 R
+>> endobj
+82 0 obj
+<<
+ /Title (\376\377\0\65\0\40\0\123\0\145\0\162\0\166\0\154\0\145\0\164\0\40\0\105\0\156\0\147\0\151\0\156\0\145\0\163)
+ /Parent 72 0 R
+ /First 83 0 R
+ /Last 84 0 R
+ /Prev 81 0 R
+ /Next 85 0 R
+ /Count -2
+ /A 27 0 R
+>> endobj
+83 0 obj
+<<
+ /Title (\376\377\0\65\0\56\0\61\0\40\0\124\0\157\0\155\0\143\0\141\0\164)
+ /Parent 82 0 R
+ /Next 84 0 R
+ /A 29 0 R
+>> endobj
+84 0 obj
+<<
+ /Title (\376\377\0\65\0\56\0\62\0\40\0\127\0\145\0\142\0\123\0\160\0\150\0\145\0\162\0\145\0\40\0\63\0\56\0\65)
+ /Parent 82 0 R
+ /Prev 83 0 R
+ /A 31 0 R
+>> endobj
+85 0 obj
+<<
+ /Title (\376\377\0\66\0\40\0\110\0\141\0\156\0\144\0\154\0\151\0\156\0\147\0\40\0\143\0\157\0\155\0\160\0\154\0\145\0\170\0\40\0\165\0\163\0\145\0\40\0\143\0\141\0\163\0\145\0\163)
+ /Parent 72 0 R
+ /Prev 82 0 R
+ /A 33 0 R
+>> endobj
+86 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+87 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+88 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+89 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+90 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+91 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+92 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 7
+/Kids [6 0 R 37 0 R 43 0 R 48 0 R 56 0 R 61 0 R 66 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ /Outlines 72 0 R
+ /PageMode /UseOutlines
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F1 86 0 R /F5 87 0 R /F3 88 0 R /F2 89 0 R /F9 90 0 R /F6 91 0 R /F7 92 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+9 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 67.0 659.0 null]
+>>
+endobj
+11 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 67.0 595.666 null]
+>>
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 67.0 340.322 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 67.0 250.578 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [43 0 R /XYZ 67.0 503.99 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [48 0 R /XYZ 67.0 444.89 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [48 0 R /XYZ 67.0 388.137 null]
+>>
+endobj
+23 0 obj
+<<
+/S /GoTo
+/D [48 0 R /XYZ 67.0 224.984 null]
+>>
+endobj
+25 0 obj
+<<
+/S /GoTo
+/D [56 0 R /XYZ 67.0 206.24 null]
+>>
+endobj
+27 0 obj
+<<
+/S /GoTo
+/D [61 0 R /XYZ 67.0 407.4 null]
+>>
+endobj
+29 0 obj
+<<
+/S /GoTo
+/D [61 0 R /XYZ 67.0 317.666 null]
+>>
+endobj
+31 0 obj
+<<
+/S /GoTo
+/D [61 0 R /XYZ 67.0 247.713 null]
+>>
+endobj
+33 0 obj
+<<
+/S /GoTo
+/D [66 0 R /XYZ 67.0 624.6 null]
+>>
+endobj
+72 0 obj
+<<
+ /First 73 0 R
+ /Last 85 0 R
+>> endobj
+xref
+0 93
+0000000000 65535 f 
+0000024936 00000 n 
+0000025036 00000 n 
+0000025128 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000001208 00000 n 
+0000001328 00000 n 
+0000001451 00000 n 
+0000025273 00000 n 
+0000001585 00000 n 
+0000025336 00000 n 
+0000001721 00000 n 
+0000025402 00000 n 
+0000001857 00000 n 
+0000025468 00000 n 
+0000001993 00000 n 
+0000025534 00000 n 
+0000002129 00000 n 
+0000025599 00000 n 
+0000002263 00000 n 
+0000025664 00000 n 
+0000002397 00000 n 
+0000025730 00000 n 
+0000002533 00000 n 
+0000025796 00000 n 
+0000002669 00000 n 
+0000025861 00000 n 
+0000002804 00000 n 
+0000025925 00000 n 
+0000002939 00000 n 
+0000025991 00000 n 
+0000003074 00000 n 
+0000026057 00000 n 
+0000003210 00000 n 
+0000003392 00000 n 
+0000003578 00000 n 
+0000005869 00000 n 
+0000005992 00000 n 
+0000006033 00000 n 
+0000006201 00000 n 
+0000006383 00000 n 
+0000006569 00000 n 
+0000008624 00000 n 
+0000008747 00000 n 
+0000008781 00000 n 
+0000008963 00000 n 
+0000009149 00000 n 
+0000012162 00000 n 
+0000012285 00000 n 
+0000012340 00000 n 
+0000012508 00000 n 
+0000012698 00000 n 
+0000012876 00000 n 
+0000013058 00000 n 
+0000013244 00000 n 
+0000015329 00000 n 
+0000015452 00000 n 
+0000015486 00000 n 
+0000015668 00000 n 
+0000015854 00000 n 
+0000018518 00000 n 
+0000018641 00000 n 
+0000018675 00000 n 
+0000018857 00000 n 
+0000019043 00000 n 
+0000020067 00000 n 
+0000020190 00000 n 
+0000020238 00000 n 
+0000020416 00000 n 
+0000020592 00000 n 
+0000020774 00000 n 
+0000026121 00000 n 
+0000020960 00000 n 
+0000021099 00000 n 
+0000021440 00000 n 
+0000021721 00000 n 
+0000021923 00000 n 
+0000022220 00000 n 
+0000022455 00000 n 
+0000022696 00000 n 
+0000023051 00000 n 
+0000023369 00000 n 
+0000023604 00000 n 
+0000023742 00000 n 
+0000023918 00000 n 
+0000024163 00000 n 
+0000024271 00000 n 
+0000024381 00000 n 
+0000024494 00000 n 
+0000024610 00000 n 
+0000024716 00000 n 
+0000024827 00000 n 
+trailer
+<<
+/Size 93
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+26172
+%%EOF

Added: xmlgraphics/site/deploy/fop/0.94/servlets.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/site/deploy/fop/0.94/servlets.xml?rev=569118&view=auto
==============================================================================
--- xmlgraphics/site/deploy/fop/0.94/servlets.xml (added)
+++ xmlgraphics/site/deploy/fop/0.94/servlets.xml Thu Aug 23 12:00:37 2007
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><!--
+  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 V1.3//EN" "document-v13.dtd">
+<document>
+  <header>
+    <title>Servlets</title>
+    <subtitle>How to use Apache FOP in a Servlet</subtitle>
+    <version>$Revision: 569104 $</version>
+  </header>
+  <body>
+    <section id="overview">
+      <title>Overview</title>
+      <p>
+        This page discusses topic all around using Apache FOP in a servlet environment.
+      </p>
+    </section>
+    <section id="example-servlets">
+      <title>Example Servlets in the FOP distribution</title>
+      <p>
+        In the directory {fop-dir}/src/java/org/apache/fop/servlet, you'll find a working example
+        of a FOP-enabled servlet.
+      </p>
+      <p>
+        The servlet is automatically built when you build Apache FOP using the supplied Ant script. After building 
+        the servlet, drop fop.war into the webapps directory of Apache Tomcat (or any other web container). Then, you can use 
+        URLs like the following to generate PDF files:
+      </p>
+      <ul>
+        <li>http://localhost:8080/fop/fop?fo=/home/path/to/fofile.fo</li>
+        <li>http://localhost:8080/fop/fop?xml=/home/path/to/xmlfile.xml&amp;xsl=/home/path/to/xslfile.xsl</li>
+      </ul>
+      <p/>
+      <p>The source code for the servlet can be found under {fop-dir}/src/java/org/apache/fop/servlet/FopServlet.java.</p>
+      <note>
+        This example servlet should not be used on a public web server connected to the Internet as it does not contain
+        any measures to prevent Denial-of-Service-Attacks. It is provided as an example and as a starting point for
+        your own servlet.
+      </note>
+    </section>
+    <section id="servlet">
+      <title>Create your own Servlet</title>
+      <note>
+        This section assumes you are familiar with <link href="embedding.html">embedding FOP</link>.
+      </note>
+      <section id="minimal-servlet">
+        <title>A minimal Servlet</title>
+        <p>
+          Here is a minimal code snippet to demonstrate the basics:
+        </p>
+        <source xml:space="preserve"><![CDATA[private FopFactory fopFactory = FopFactory.newInstance();
+private TransformerFactory tFactory = TransformerFactory.newInstance();
+        
+public void doGet(HttpServletRequest request,
+                   HttpServletResponse response) throws ServletException {
+    try {
+        response.setContentType("application/pdf");
+        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, response.getOutputStream());
+        Transformer transformer = tFactory.newTransformer();
+        Source src = new StreamSource("foo.fo");
+        Result res = new SAXResult(fop.getDefaultHandler());
+        transformer.transform(src, res);
+    } catch (Exception ex) {
+        throw new ServletException(ex);
+    }
+}]]></source>
+        <note>
+          There are numerous problems with the code snippet above.
+          Its purpose is only to demonstrate the basic concepts.
+          See below for details.
+        </note>
+      </section>
+      <section id="xslt">
+        <title>Adding XSL tranformation (XSLT)</title>
+        <p>
+          A common requirement is to transform an XML source to
+          XSL-FO using an XSL transformation. It is recommended to use
+          JAXP for this task. The following snippet shows the basic
+          code:
+        </p>
+        <source xml:space="preserve"><![CDATA[private FopFactory fopFactory = FopFactory.newInstance();
+private TransformerFactory tFactory = TransformerFactory.newInstance();
+
+public void init() throws ServletException {
+    //Optionally customize the FopFactory and TransformerFactory here
+}
+
+[..]
+
+    //Setup a buffer to obtain the content length
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+    //Setup FOP
+    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
+
+    //Setup Transformer
+    Source xsltSrc = new StreamSource(new File("foo-xml2fo.xsl"));
+    Transformer transformer = tFactory.newTransformer(xsltSrc);
+
+    //Make sure the XSL transformation's result is piped through to FOP
+    Result res = new SAXResult(fop.getDefaultHandler());
+
+    //Setup input
+    Source src = new StreamSource(new File("foo.xml"));
+
+    //Start the transformation and rendering process
+    transformer.transform(src, res);
+
+    //Prepare response
+    response.setContentType("application/pdf");
+    response.setContentLength(out.size());
+    
+    //Send content to Browser
+    response.getOutputStream().write(out.toByteArray());
+    response.getOutputStream().flush();]]></source>
+        <note>
+          Buffering the generated PDF in a ByteArrayOutputStream is done to avoid potential 
+          problems with the Acrobat Reader Plug-in in Microsoft Internet Explorer.
+        </note>
+        <p>
+          The <code>Source</code> instance used above is simply an
+          example.  If you have to read the XML from a string, supply
+          a <code>new StreamSource(new
+          StringReader(xmlstring))</code>. Constructing and reparsing
+          an XML string is generally less desirable than using a
+          SAXSource if you generate your XML.  You can alternatively
+          supply a DOMSource as well.  You may also use dynamically
+          generated XSL if you like.
+        </p>
+        <p>
+          Because you have an explicit <code>Transformer</code> object, you can also use it to 
+          explicitely set parameters for the transformation run.
+        </p>
+      </section>
+      <section id="cfg">
+        <title>Custom configuration</title>
+        <p>
+          You can easily set up your own FOUserAgent as demonstrated on the <link href="embedding.html">Embedding page</link>.
+        </p>
+      </section>
+      <section id="performance">
+        <title>Improving performance</title>
+        <p>
+          There are several options to consider:
+        </p>
+        <ul>
+          <li>
+            Instead of java.io.ByteArrayOutputStream consider using the ByteArrayOutputStream
+            implementation from the <link href="ext:jakarta/commons/io">Jakarta Commons IO project</link> which allocates less memory.
+            The full class name is: <code>org.apache.commons.io.output.ByteArrayOutputStream</code>
+          </li>
+          <li>
+            In certain cases it can help to write the generated PDF to a temporary file so
+            you can quickly reuse the file. This is especially useful, if Internet Explorer
+            calls the servlet multiple times with the same request or if you often generate
+            equal PDFs.
+          </li>
+        </ul>
+        <p>
+          Of course, the 
+          <link href="embedding.html#performance">performance hints from the Embedding page</link>
+          apply here, too.
+        </p>
+      </section>
+      <section id="uriresolver">
+        <title>Accessing resources in your web application</title>
+        <p>
+          Often, you will want to use resources (stylesheets, images etc.) which are bundled with
+          your web application. FOP provides a URIResolver implementation that lets you access
+          files via the Servlet's ServletContext. The class is called 
+          <code>org.apache.fop.servlet.ServletContextURIResolver</code>.
+        </p>
+        <p>
+          Here's how to set it up in your servlet. Instantiate a new instance in the servlet's 
+          init() method:
+        </p>
+        <source xml:space="preserve"><![CDATA[
+    /** URIResolver for use by this servlet */
+    protected URIResolver uriResolver; 
+
+    public void init() throws ServletException {
+        this.uriResolver = new ServletContextURIResolver(getServletContext());
+        [..]
+    }]]></source>
+        <p>
+          The ServletContextURIResolver reacts on URIs beginning with "servlet-context:". If you
+          want to access an image in a subdirectory of your web application, you could, for
+          example, use: "servlet-context:/images/myimage.png". Don't forget the leading slash
+          after the colon!
+        </p>
+        <p>
+          Further down, you can use the URIResolver for various things:
+        </p>
+        <ul>
+          <li>
+            With the Transformer (JAXP/XSLT) so things like document() functions can resolver 
+            "servlet-context:" URIs.
+          </li>
+          <li>
+            With the FopFactory so every resource FOP loads can be loaded using a "servlet-context:"
+            URI.
+          </li>
+          <li>
+            You can the ServletContextURIResolver yourself in your servlet code to access
+            stylesheets or XML files bundled with your web application.
+          </li>
+        </ul>
+        <p>
+          Here are some example snippets:
+        </p>
+        <source xml:space="preserve"><![CDATA[
+//Setting up the JAXP TransformerFactory
+this.transFactory = TransformerFactory.newInstance();
+this.transFactory.setURIResolver(this.uriResolver);
+
+[..]
+
+//Setting up the FOP factory
+this.fopFactory = FopFactory.newInstance();
+this.fopFactory.setURIResolver(this.uriResolver);
+
+[..]
+
+//The stylesheet for the JAXP Transfomer
+Source xsltSrc = this.uriResolver.resolve(
+    "servlet-context:/xslt/mystylesheet.xsl", null);
+Transformer transformer = this.transFactory.newTransformer(xsltSrc);
+transformer.setURIResolver(this.uriResolver);]]></source>
+      </section>
+    </section>
+    <section id="ie">
+      <title>Notes on Microsoft Internet Explorer</title>
+      <p>
+        Some versions of Internet Explorer will not automatically show the PDF or call the servlet multiple times.
+        These are well-known limitations of Internet Explorer and are not a problem of the servlet.
+        However, Internet Explorer can still be used to download the PDF so that it can be viewed later. 
+        Here are some suggestions in this context:
+      </p>
+      <ul>
+        <li>
+          Use an URL ending in <code>.pdf</code>, like
+          <code>http://myserver/servlet/stuff.pdf</code>. Yes, the servlet can
+          be configured to handle this. If the URL has to contain parameters,
+          try to have <strong>both</strong> the base URL as well as the last parameter end in
+          <code>.pdf</code>, if necessary append a dummy parameter, like
+          <code>http://myserver/servlet/stuff.pdf?par1=a&amp;par2=b&amp;d=.pdf</code>. The
+          effect may depend on IEx version.
+        </li>
+        <li>
+          Give IEx the opportunity to cache. In particular, ensure the
+          server does not set any headers causing IEx not to cache the
+          content. This may be a real problem if the document is sent
+          over HTTPS, because most IEx installations will by default
+          <em>not</em> cache any content retrieved over HTTPS.
+          Setting the <code>Expires</code> header entry may help in
+          this case:<br/> <code>response.setDateHeader("Expires",
+          System.currentTimeMillis() + cacheExpiringDuration *
+          1000);</code><br/> Consult your server manual and the
+          relevant RFCs for further details on HTTP headers and
+          caching.
+        </li>
+        <li>
+          Cache in the server. It may help to include a parameter in
+          the URL which has a timestamp as the value min order to
+          decide whether a request is repeated. IEx is reported to
+          retrieve a document up to three times, but never more often.
+        </li>
+      </ul>
+    </section>
+    <section id="servlet-engine">
+      <title>Servlet Engines</title>
+      <p>
+        When using a servlet engine, there are potential CLASSPATH issues, and potential conflicts 
+        with existing XML/XSLT libraries. Servlet containers also often use their own classloaders 
+        for loading webapps, which can cause bugs and security problems.
+      </p>
+      <section id="tomcat">
+        <title>Tomcat</title>
+        <p>
+          Check Tomcat's documentation for detailed instructions about installing FOP and Cocoon.
+          There are known bugs that must be addressed, particularly for Tomcat 4.0.3.
+        </p>
+      </section>
+      <section id="websphere">
+        <title>WebSphere 3.5</title>
+        <p>
+          Put a copy of a working parser in some directory where WebSphere can access it.
+          For example, if /usr/webapps/yourapp/servlets is the CLASSPATH for your servlets, 
+          copy the Xerces jar into it (any other directory would also be fine).
+          Do not add the jar to the servlet CLASSPATH, but add it to the CLASSPATH of the 
+          application server which contains your web application.
+          In the WebSphere administration console, click on the "environment" button in the 
+          "general" tab. In the "variable name" box, enter "CLASSPATH".
+          In the "value" box, enter the correct path to the parser jar file 
+          (/usr/webapps/yourapp/servlets/Xerces.jar in our example here).
+          Press "OK", then apply the change and restart the application server.
+        </p>
+      </section>
+    </section>
+    <section id="complex-usecases">
+      <title>Handling complex use cases</title>
+      <p>
+        Sometimes the requirements for a servlet get quite sophisticated: SQL data sources, 
+        multiple XSL transformations, merging of several datasources etc. In such a case 
+        consider using <link class="fork" href="ext:cocoon">Apache Cocoon</link> instead 
+        of a custom servlet to accomplish your goal.
+      </p>
+    </section>
+  </body>
+</document>
\ No newline at end of file

Propchange: xmlgraphics/site/deploy/fop/0.94/servlets.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/site/deploy/fop/0.94/servlets.xml
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
Apache XML Graphics Project URL: http://xmlgraphics.apache.org/
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org


Mime
View raw message