Contents
/opt/fop/{build,lib}
; JAI components include
libmlib_jai.so, jai_codec.jar, jai_core.jar, and
mlibwrapper_jai.jar
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.
This package is known to build and work properly using an LFS-8.1 platform.
Download (HTTP): https://archive.apache.org/dist/xmlgraphics/fop/source/fop-2.2-src.tar.gz
Download MD5 sum: 6d2388bd8851b4883d3258c0afc96895
Download size: 24 MB
Estimated disk space required: 493 MB (add 39 MB for tests)
Estimated build time: 0.7 SBU (add 0.7 SBU for tests)
Recommended packages
Objects for Formatting Objects (OFFO) hyphenation
patterns:
https://downloads.sourceforge.net/offo/2.2/offo-hyphenation.zip
bf9c09bf05108ef9661b8f08d91c2336
862 KB
Java Advanced Imaging (JAI) API components (architecture
dependent):
http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-i586.tar.gz
a2cbc155ef3899bcde9c74a8035764b3
3.4 MB
or
http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-amd64.tar.gz
4a906db35612f668aeef2c0606d7075b
3.4 MB
JUnit-4.11 (to run tests), X Window System (to run tests), Maven, JAI Image I/O Tools, and JEuclid
User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/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.
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
Install the JAI API components. As the root
user:
case `uname -m` in i?86) tar -xf ../jai-1_1_3-lib-linux-i586.tar.gz cp -v jai-1_1_3/lib/{jai*,mlibwrapper_jai.jar} $JAVA_HOME/jre/lib/ext/ cp -v jai-1_1_3/lib/libmlib_jai.so $JAVA_HOME/jre/lib/i386/ ;; x86_64) tar -xf ../jai-1_1_3-lib-linux-amd64.tar.gz cp -v jai-1_1_3/lib/{jai*,mlibwrapper_jai.jar} $JAVA_HOME/jre/lib/ext/ cp -v jai-1_1_3/lib/libmlib_jai.so $JAVA_HOME/jre/lib/amd64/ ;; esac
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-2.2 && cp -v ../{KEYS,LICENSE,NOTICE,README} /opt/fop-2.2 && cp -vR build conf examples fop* javadocs lib /opt/fop-2.2 && chmod a+x /opt/fop-2.2/fop && ln -v -sfn fop-2.2 /opt/fop
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 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, and javadocs
builds the documentation.
ln -v -sf fop-2.2
/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.
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 .level
and
java.util.logging.ConsoleHandler.level
to the
desired value.
/opt/fop/{build,lib}
; JAI components include
libmlib_jai.so, jai_codec.jar, jai_core.jar, and
mlibwrapper_jai.jar
Last updated on 2017-08-26 09:42:24 -0700