====== XML+XSL-FO+PDF ====== ===== FOP ===== http://xmlgraphics.apache.org/fop/1.1/ ==== Čeština ==== Zdroj: http://www.kosek.cz/sw/fop/ Do **fop-1.1/conf/fop.xconf** element **fonts** vložit ****. __Podopora dělení slov__ http://sourceforge.net/projects/offo/files/latest/download?source=dlp **fop-hyph.jar** vložit do **fop-1.1/lib** __České TTF fonty__ http://corefonts.sourceforge.net/ ==== Instalace ==== **Stažení a rozbalení FOP** shell# mkdir fop; cd fop shell# wget -c -t 0 ftp://mirror.hosting90.cz/apache/xmlgraphics/fop/binaries/fop-1.1-bin.tar.gz shell# tar xvzf fop-1.1-bin.tar.gz **Dělení českých slov** Stáhnout: http://sourceforge.net/projects/offo/files/latest/download?source=dlp shell# unzip offo-hyphenation-binary_v2.0.zip shell# cp ./offo-hyphenation-binary/fop-hyph.jar ./fop-1.1/lib **Stažení TTF fontů** shell# mkdir fonts-cab Stáhnout: http://sourceforge.net/projects/corefonts/files/the%20fonts/final/ * andale32.exe * arialb32.exe * arial32.exe * comic32.exe * courie32.exe * georgi32.exe * impact32.exe * times32.exe * trebuc32.exe * verdan32.exe * webdin32.exe **Extrahování TTF fontů z CAB** shell# yum install cabextract.x86_64 shell# cabextract ./fonts-cab/* shell# mkdir fonts shell# cp ./fonts-cab/*.TTF ./fonts **Vytvoření metric pro TTF fonty** http://xmlgraphics.apache.org/fop/1.1/fonts.html #!/bin/bash # # Create TrueType Font Metrics # # Author: Jiří Blažek (blazek@isn.cz) # # FOP path FOP_PATH="./fop-1.1" # True Type Fonts path TTF_PATH="./fonts" # extension from EXT_FROM="ttf" # extension to EXT_TO="xml" # rename files from upper to lower for TTF_FILE in $(ls $TTF_PATH/*.TTF); do mv $TTF_FILE $(echo $TTF_FILE | tr '[:upper:]' '[:lower:]'); done # Create TrueType Font Metrics for TTF_FILE in $(ls $TTF_PATH/*.ttf); do XML_FILE=$(echo $TTF_FILE | sed "s/\(.*\.\)$EXT_FROM/\1$EXT_TO/"); java -cp $FOP_PATH/build/fop.jar:$FOP_PATH/lib/avalon-framework-4.2.0.jar:$FOP_PATH/lib/commons-logging-1.0.4.jar:$FOP_PATH/lib/commons-io-1.3.1.jar:$FOP_PATH/lib/commons-logging-1.0.4.jar:$FOP_PATH/lib/xmlgraphics-commons-1.5.jar org.apache.fop.fonts.apps.TTFReader $TTF_FILE $XML_FILE; done shell# chmod 755 create-ttf-metrics.sh shell# ./create-ttf-metrics.sh **Přesun fontů do FOP** shell# mv fonts fop-1.1 **Konfigurace fop.xconf** http://xmlgraphics.apache.org/fop/1.1/configuration.html ../fonts ... ==== Spuštění ==== shell# ./fop-1.1/fop -c ./fop-1.1/conf/fop.xconf -xml ./xml/test.xml ./xsl/test.xsl -pdf ./pdf/test.pdf === JAVA FOP class === package test; import org.apache.log4j.Logger; import java.io.File; import java.io.OutputStream; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Source; import javax.xml.transform.Result; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.sax.SAXResult; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; /** * * @author blazek */ public class FopGen { static Logger logger = Logger.getLogger(FopGen.class); private String xconf; private String fontBase; private String xmlInput; private String xsltInput; private String pdfOutput; public FopGen() { } public FopGen(String xconf, String fontBase, String xmlInput, String xsltInput, String pdfOutput) { this.xconf = xconf; this.fontBase = fontBase; this.xmlInput = xmlInput; this.xsltInput = xsltInput; this.pdfOutput = pdfOutput; } public String getXconf() { return xconf; } public void setXconf(String xconf) { this.xconf = xconf; } public String getFontBase() { return fontBase; } public void setFontBase(String fontBase) { this.fontBase = fontBase; } public String getXmlInput() { return xmlInput; } public void setXmlInput(String xmlInput) { this.xmlInput = xmlInput; } public String getXsltInput() { return xsltInput; } public void setXsltInput(String xsltInput) { this.xsltInput = xsltInput; } public String getPdfOutput() { return pdfOutput; } public void setPdfOutput(String pdfOutput) { this.pdfOutput = pdfOutput; } public boolean createPDF() { try { // configure fopFactory as desired FopFactory fopFactory = FopFactory.newInstance(); // configure fonts fopFactory.setUserConfig(this.xconf); fopFactory.getFontManager().setFontBaseURL("file://" + this.fontBase); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); // Setup output OutputStream out = new java.io.FileOutputStream(new File(this.pdfOutput)); out = new java.io.BufferedOutputStream(out); try { // Construct fop with desired output format Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); // Setup XSLT TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(new File(this.xsltInput))); // Setup input for XSLT transformation Source src = new StreamSource(new File(this.xmlInput)); // Resulting SAX events (the generated FO) must be piped through to FOP Result res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); } finally { out.close(); } } catch (Exception e) { e.printStackTrace(System.err); System.exit(-1); } return true; } }