fop-2.10

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.

[Note]

Note

Development versions of BLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.

Package Information

Additional Downloads

Required Additional Downloads:

Recommended packages

fop Dependencies

Required

apache-ant-1.10.15

Optional

a graphical environment (to run tests), JAI Image I/O Tools, and JEuclid

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 a temporary Maven binary

Starting with fop-2.5, the Maven build system is required. We use the binary provided by apache, that we install in a temporary location:

tar -xf ../apache-maven-3.9.4-bin.tar.gz -C /tmp

Installing fop Components

First, fix a build error caused by Java-23:

patch -Np1 -i ../fop-2.10-upstream_fixes-1.patch

The javadoc command that ships with OpenJDK 10 and later has become much stricter than previous versions regarding conformance of the Javadoc comments in source code to HTML. The FOP documentation does not meet those standards, 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"/>\
<arg value="--ignore-source-errors"/>' \
    fop/build.xml

Compile fop by running the following commands:

cd fop &&

LC_ALL=en_US.UTF-8                     \
PATH=$PATH:/tmp/apache-maven-3.9.4/bin \
ant all javadocs &&

mv build/javadocs .

This package comes with a test suite, but the java infrastructure installed in this book does not allow running it.

Now, install Fop as the root user:

install -v -d -m755 -o root -g root          /opt/fop-2.10 &&
cp -vR build conf examples fop* javadocs lib /opt/fop-2.10 &&
chmod a+x /opt/fop-2.10/fop                                &&
ln -v -sfn fop-2.10 /opt/fop

Finally, remove the temporary copy of Apache Maven:

rm -rf /tmp/apache-maven-3.9.4

Command Explanations

sed -i ... build.xml: This adds three switches to the javadoc command, preventing some errors from occurring when building the documentation.

export LC_ALL=en_US.UTF-8: the compiler fails if using an ASCII locale.

ant target: This reads the file build.xml and builds the target: compile compiles the java sources, jar-main generates jar archives, jar-hyphenation generates the hyphenation patterns for FOP, junit runs the junit tests, and javadocs builds the documentation. The all target runs all of the above.

ln -v -sf fop-2.10 /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

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 the system-wide profile with the following command as the root user:

cat > /etc/profile.d/fop.sh << "EOF"
# Begin /etc/profile.d/fop.sh

pathappend /opt/fop

# End /etc/profile.d/fop.sh
EOF
[Note]

Note

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 .level and java.util.logging.ConsoleHandler.level to the desired value.

Contents

Installed Programs: fop
Installed Libraries: 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
Installed Directory: /opt/fop-2.10

Short Descriptions

fop

is a wrapper script to the java command which sets up the fop environment and passes the required parameters

fop.jar

contains all the fop Java classes