--- /dev/null
+<?xml version="1.0" standalone="no"?>
+<!--
+ Copyright 1999-2004 The Apache Software Foundation
+
+ Licensed 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.1//EN"
+ "http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-forrest/src/core/context/resources/schema/dtd/document-v12.dtd" [
+<!ENTITY lsquo "‘">
+<!ENTITY rsquo "’">
+<!ENTITY ldquo "“">
+<!ENTITY rdquo "”">
+]>
+
+<document>
+ <header>
+ <title>FOP: Configuration and Logging</title>
+ <version>$Revision$</version>
+ </header>
+
+ <body>
+
+ <section id="general">
+ <title>Configuration File Basics</title>
+ <p>The FOP configuration file is an XML file containing a
+variety of settings that are useful for controlling FOP's
+behavior, and for helping it find resources that you wish it to
+use.</p>
+ <p>The easiest way to get started using a FOP configuration file
+is to copy the sample found at <code>{fop-dir}/conf/fop.xconf</code>
+to a location of your choice, and then to edit it according to your
+needs. It contains templates for the various configuration options,
+most of which are commented out. Remove the comments and change the
+settings for entries that you wish to use. Be sure to follow any
+instructions, including comments which specify the value range. Also,
+since the configuration file is XML, be sure to keep it
+well-formed.</p>
+ </section>
+
+ <section id="general-available">
+ <title>Making Configuration Available to FOP</title>
+ <p>After creating your configuration file, you must tell FOP how
+to find it.</p>
+
+ <section id="command-line">
+ <title>From the Command Line</title>
+ <p>When you run FOP from the command-line, use the
+“<code>-c</code>” command-line option with the path to the
+configuration file as the option value.</p>
+ </section>
+
+ <section id="embedded-file">
+ <title>A Configuration File in an Embedded Application</title>
+ <p>FOP uses the Avalon framework configuration package
+<code>org.apache.avalon.framework.configuration</code>. For detailed
+information, see the documentation of the package.</p>
+ <p>If you want to use a user configuration file with your
+embedded program, you need to build an Avalon configuration
+object from it, and register that with the user agent:</p>
+
+ <source>FOUserAgent foUserAgent;
+XMLReader parser;
+DefaultConfigurationBuilder configBuilder;
+File userConfigFile;
+Configuration userConfig;
+
+configBuilder = new DefaultConfigurationBuilder(parser);
+userConfigFile = new File("YourConfigFile.xml");
+userConfig = configBuilder.buildFromFile(userConfigFile);
+foUserAgent.setUserConfig(userConfig);
+</source>
+ <p>You can find example code in FOP's
+<code>apps.CommandLine</code> class, method
+<code>createUserConfig</code>.</p>
+ </section>
+
+ <section id="embedded-build">
+ <title>Programmatically Building the Configuration</title>
+ <p>You can also build the configuration object programmatically,
+instead of building it from an external file. Make sure that the
+configuration object is equivalent to a configuration object that
+would be obtained from a correct configuration file. Register the
+configuration object with the user agent as described above.</p>
+ </section>
+
+ </section>
+
+ <section id="config-overview">
+ <title>The Configuration File</title>
+ <p>The top-level element is arbitrary. You may give it any name
+that is useful for you, e.g. <code><fop-configuration
+version="2"></code>.</p>
+ <p>Inside the top-level element the configuration may contain
+three sections: <code>userAgent</code>, <code>renderers</code>,
+and <code>hyphenation</code>. At the moment of this writing the
+<code>userAgent</code> and <code>hyphenation</code> sections are
+not used by FOP.</p>
+ <p>The <code>renderers</code> section has subsections called
+<code>renderer</code>. There may be one subsection for each type
+of renderer. The renderers are identified by their MIME type,
+which is given in the <code>mime</code> attribute. For example:
+<code><renderer mime="application/pdf"></code>. The content
+of each <code>renderer</code> subsection depends on the type of
+renderer.</p>
+ <p>The PDF renderer (MIME type <code>application/pdf</code>) has
+several options:</p>
+ <dl>
+ <dt><code>filterList</code></dt>
+ <dd>Contains a number of <code>value</code> elements, whose
+content specify a filter which should be applied. Possible
+filters are: <code>flate</code>, <code>ascii-85</code>,
+<code>ascii-hex</code>. The <code>flate</code> filter is on by
+default.</dd>
+ <dt><code>fonts</code></dt>
+ <dd>Contains a number of <code>font</code> elements. Each
+<code>font</code> element represents a font file,
+e.g. <code>arial.ttf</code>. It contains a number of
+<code>font-triplet</code> elements, defining the font triplets
+which are provided by this font file. See the example
+configuration file for details.</dd>
+ </dl>
+ <p>The example configuration file provides for details about the
+other renderers.</p>
+ </section>
+
+ <section id="hyphenation-dir">
+ <title>Hyphenation</title>
+ <p>When FOP needs to load a hyphenation file for a certain
+language and country combination, it follows these steps.</p>
+ <ol>
+ <li>FOP searches for the compiled hyphenation file (extension
+<code>hyp</code> in the directory <code>hyph</code> in the
+class path.</li>
+ <li>FOP searches for the compiled or the XML hyphenation file
+in a user directory. At the time of this writing FOP does not
+read the configuration file for the user directory. It always
+uses the directory <code>/hyph</code>.</li>
+ </ol>
+ <p>It is possible to add user hyphenation files to FOP's
+hyphenation directory when FOP is built. The directory
+containing user hyphenation files must be specified in the
+variable <code>user.hyph.dir</code> in the local build
+properties file. All hyphenation files in the directory are
+compiled, and the compiled files are added to the hyphenation
+directory in the build directory.</p>
+ <p>See <link href="../hyphenation.html">FOP: Hyphenation</link> for
+more information on creating and modifying hyphenation within FOP.</p>
+ </section>
+
+ <section id="fonts">
+ <title>Fonts</title>
+ <p>Font configuration information is included in the FOP
+configuration file as describe above. It is documented in more
+detail at <link href="../fonts.html">FOP: Fonts</link>. Note
+especially the section entitled <link
+href="../fonts.html#register">Register Fonts with FOP</link>.</p>
+ </section>
+
+ <section id="logging">
+ <title>Logging</title>
+ <p>FOP uses the Jakarta Commons logging package
+<code>org.apache.commons.logging</code>. For detailed information, see
+the documentation of the package.</p>
+ <p>Commons logging is entirely configured by the user, using
+Java system properties. Configuration happens in two stages.</p>
+ <p>First you configure which logging implementation you want
+to use. For example:</p>
+ <source>org.apache.commons.logging.Log
+ =org.apache.commons.logging.impl.SimpleLog</source>
+ <p><code>SimpleLog is the default logging package on most Java
+systems. On Java 1.4 systems JDK 1.4 is the default.</code></p>
+ <p>Secondly, you configure the selected logging package. How
+this is done depends on the logging package. The most important
+feature is the log level. The default is level “info”. An
+example configuration file for SimpleLog is:</p>
+ <source>
+# logging level for all loggers, default info
+org.apache.commons.logging.simplelog.defaultlog=info
+
+# logging level for named loggers
+org.apache.commons.logging.simplelog.log.xxxxx=debug
+org.apache.commons.logging.simplelog.log.org.apache.fop.pdf=trace
+</source>
+ <p>FOP uses several named loggers. When you set the logging level
+for all loggers to “info”, you get a decent small amount
+of information
+about application progress. The debugging and especially the trace
+levels produce a lot of output. If you need these logging levels,
+it is wise to switch them on for one or several specific loggers. The
+names of the loggers can be found in the source files. Many loggers
+bear the name of their package, their class or of a superclass.</p>
+ </section>
+
+ </body>
+</document>
+