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-11.0 platform.
Download (HTTP): https://archive.apache.org/dist/xmlgraphics/fop/source/fop-2.6-src.tar.gz
Download MD5 sum: 1d6bc84d2ab7f971bbc628080e3c307f
Download size: 26 MB
Estimated disk space required: 522 MB (including files downloaded to the user directory)
Estimated build time: 0.4 SBU
Required Additional Downloads:
                PDFBox:
                
                http://archive.apache.org/dist/pdfbox/2.0.24/pdfbox-2.0.24.jar
                9e97fc59c662738a5fb82dcc447d1e2f
                2.7 MB
              
                PDFBox Fonts:
                
                http://archive.apache.org/dist/pdfbox/2.0.24/fontbox-2.0.24.jar
                6c2066df0d706d85e950fe8c73d52ed8
                1.5 MB
              
                Maven build system:
                
                http://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
                9792c717f5845d952907d5144b8253c3
                9.1 MB (additionally, about 82 MB are downloaded to the
                building user's directory)
              
Recommended packages
                Objects for Formatting Objects (OFFO) hyphenation
                patterns:
                
                https://downloads.sourceforge.net/offo/2.2/offo-hyphenation.zip
                bf9c09bf05108ef9661b8f08d91c2336
                862 KB
              
X Window System (to run tests), JAI Image I/O Tools, and JEuclid
User Notes: https://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
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.6.3-bin.tar.gz -C /tmp
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
          Fix building with JDK-16 due to an outdated Apache Maven plugin:
sed -i 's/<war.plugin.version>2.2/<war.plugin.version>3.3.1/' pom.xml
            The build.xml file calls for an old
            version of PDFBox components
            that are no longer available. Copy the updated PDFBox components
            into the source tree:
          
cp ../{pdf,font}box-2.0.24.jar fop/lib
          Compile fop by running the following commands:
cd fop && LC_ALL=en_US.UTF-8 \ PATH=$PATH:/tmp/apache-maven-3.6.3/bin \ ant all javadocs && mv build/javadocs .
This package comes with a testsuite, 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.6 && cp -vR build conf examples fop* javadocs lib /opt/fop-2.6 && chmod a+x /opt/fop-2.6/fop && ln -v -sfn fop-2.6 /opt/fop
The last thing to do is to clean what we have done:
rm -rf /tmp/apache-maven-3.6.3
sed -i ... build.xml: This adds two switches to the javadoc command, preventing some errors from occuring 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.6
          /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 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]](../images/note.png) 
            
              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