%general-entities; ]> $LastChangedBy$ $Date$ fop-&fop-version; fop Introduction to fop The FOP (Formatting Objects Processor) package contains a print formatter driven by XSL formatting objects (XSL-FO). It is a Java application that reads a formatting object tree and renders the resulting pages to a specified output. Output formats currently supported include PDF, PCL, PostScript, SVG, XML (area tree representation), print, AWT, MIF and ASCII text. The primary output target is PDF. &lfs81_checked; Package Information Download (HTTP): Download (FTP): Download MD5 sum: &fop-md5sum; Download size: &fop-size; Estimated disk space required: &fop-buildsize; Estimated build time: &fop-time; Additional Downloads Recommended packages Objects for Formatting Objects (OFFO) hyphenation patterns: &offo-md5sum; &offo-size; Java Advanced Imaging (JAI) API components (architecture dependent): &jai-md5sum; &jai-size; or &jai64-md5sum; &jai64-size; fop Dependencies Required Optional (to run tests), (to run tests), Maven, JAI Image I/O Tools, and JEuclid User Notes: Installation of fop Ensure $JAVA_HOME is set correctly before beginning the build. To build the JIMI SDK and/or XMLUnit extension classes, ensure the corresponding .jar files can be found via the CLASSPATH environment variable. Installing OFFO Hyphenation Patterns Copy the XML hyphenation patterns into the fop source tree by running the following commands: unzip ../offo-hyphenation.zip && cp offo-hyphenation/hyph/* fop/hyph && rm -rf offo-hyphenation Installing Java Advanced Imaging (JAI) API components Install the JAI API components. As the root user: case `uname -m` in i?86) tar -xf ../jai-&jai-version;-lib-linux-i586.tar.gz cp -v jai-&jai-version;/lib/{jai*,mlibwrapper_jai.jar} $JAVA_HOME/jre/lib/ext/ cp -v jai-&jai-version;/lib/libmlib_jai.so $JAVA_HOME/jre/lib/i386/ ;; x86_64) tar -xf ../jai-&jai-version;-lib-linux-amd64.tar.gz cp -v jai-&jai-version;/lib/{jai*,mlibwrapper_jai.jar} $JAVA_HOME/jre/lib/ext/ cp -v jai-&jai-version;/lib/libmlib_jai.so $JAVA_HOME/jre/lib/amd64/ ;; esac Installing fop Components The javadoc command coming with OpenJDK 8 has become much stricter than before regarding the conformance of the Javadoc comments in source code to HTML. The FOP documentation does not meet those standard, so the conformance checks have to be disabled. This can be done with the following command: sed -i '\@</javad@i\ <arg value="-Xdoclint:none"/>\ <arg value="--allow-script-in-comments"/>' fop/build.xml The stack size set in build.xml for building the hyphenation patterns is not enough. Change it by running: sed -e '/hyph\.stack/s/512k/1M/' \ -i fop/build.xml Then, compile fop by running the following commands: cd fop && export LC_ALL=en_US.UTF-8 && ant compile && ant jar-main && ant jar-hyphenation && ant javadocs && mv build/javadocs . To test the application, first modify build.xml so that tests do not stop when an error is encountered: sed -e '/haltonfailure/s/yes/off/' \ -i build.xml Then, run ant junit. The hyphenation tests will fail if OFFO hyphenation has not been compiled. To see a list of other test targets, use ant -p. You must run the tests from an X-window using a GL-aware Xorg server or some of the JUnit tests will hang. Now, as the root user: install -v -d -m755 -o root -g root /opt/fop-&fop-version; && cp -v ../{KEYS,LICENSE,NOTICE,README} /opt/fop-&fop-version; && cp -vR build conf examples fop* javadocs lib /opt/fop-&fop-version; && chmod a+x /opt/fop-&fop-version;/fop && ln -v -sfn fop-&fop-version; /opt/fop Command Explanations sed -i ... build.xml: This adds two switches to the javadoc command, preventing some errors to occur when building the documentation. export LC_ALL=en_US.UTF-8: the compiler fails if using an ASCII locale. ant : This reads the file build.xml and builds the target: compiles the java sources, generates jar archives, generates the hyphenation patterns for FOP, and builds the documentation. ln -v -sf fop-&fop-version; /opt/fop: This is optional and creates a convenience symlink so that $FOP_HOME doesn't have to be changed each time there's a package version change. Configuring fop Config Files ~/.foprc ~/.foprc Configuration Information Using fop to process some large FO's (including the FO derived from the BLFS XML sources), can lead to memory errors. Unless you add a parameter to the java command used in the fop script you may receive messages similar to the one shown below: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space To avoid errors like this, you need to pass an extra parameter to the java command used in the fop script. This can be accomplished by creating a ~/.foprc (which is sourced by the fop script) and adding the parameter to the FOP_OPTS environment variable. The fop script looks for a FOP_HOME environment variable to locate the fop class libraries. You can create this variable using the ~/.foprc file as well. Create a ~/.foprc file using the following commands: cat > ~/.foprc << "EOF" FOP_OPTS="-Xmx<RAM_Installed>m" FOP_HOME="/opt/fop" EOF Replace <RAM_Installed> with a number representing the amount of RAM installed in your computer (in megabytes). An example would be FOP_OPTS="-Xmx768m". To include the fop script in your path, update your personal or system-wide profile with the following: PATH=$PATH:/opt/fop Running fop can be somewhat verbose. The default logging level can be changed from INFO to any of FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE, ALL, or OFF. To do this, edit $JAVA_HOME/jre/lib/logging.properties and change the entries for and to the desired value. Contents Installed Programs Installed Libraries Installed Directory fop fop.jar and numerous support library classes located in /opt/fop/{build,lib}; JAI components include libmlib_jai.so, jai_codec.jar, jai_core.jar, and mlibwrapper_jai.jar /opt/fop-&fop-version; Short Descriptions fop is a wrapper script to the java command which sets up the fop environment and passes the required parameters. fop fop.jar contains all the fop Java classes. fop.jar