From: fotis Date: Sat, 22 Jul 2000 09:12:12 +0000 (+0000) Subject: allows input of xml file + xslt file to produce pdf file. Doesn't handle larger files. X-Git-Tag: pre-columns~326 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=40b1d1533e313b6b586c3bb8896975e6f456e695;p=xmlgraphics-fop.git allows input of xml file + xslt file to produce pdf file. Doesn't handle larger files. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193551 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/org/apache/fop/apps/XalanCommandLine.java b/src/org/apache/fop/apps/XalanCommandLine.java new file mode 100644 index 000000000..2d85948cb --- /dev/null +++ b/src/org/apache/fop/apps/XalanCommandLine.java @@ -0,0 +1,219 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + + +package org.apache.fop.apps; + +// SAX +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + + +// Java +import java.io.FileReader; +import java.io.File; +import java.io.StringWriter; +import java.io.StringReader; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.net.URL; + +// Xalan +import org.apache.xalan.xslt.XSLTInputSource; +import org.apache.xalan.xslt.XSLTProcessor; +import org.apache.xalan.xslt.XSLTProcessorFactory; +import org.apache.xalan.xslt.XSLTResultTarget; + +// FOP +import org.apache.fop.messaging.MessageHandler; + + +/** + * mainline class. + * + * Gets input and output filenames from the command line. + * Creates a SAX Parser (defaulting to Xerces). + * + */ +public class XalanCommandLine { + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static XMLReader createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + org.apache.fop.messaging.MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (XMLReader) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + org.apache.fop.messaging.MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, + path).toString()); + } + catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + + /** + * mainline method + * + * first command line argument is xml input file + * second command line argument is xslt file which commands the conversion from xml to xsl:fo + * third command line argument is the output file + * + * @param command line arguments + */ + public static void main(String[] args) { + String version = Version.getVersion(); + MessageHandler.logln(version); + + + if (args.length != 3) { + MessageHandler.errorln("usage: java " + + "org.apache.fop.apps.XalanCommandLine " + + "xml-file xslt-file pdf-file"); + System.exit(1); + } + + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("ERROR: Unable to create SAX parser"); + System.exit(1); + } + + // setting the parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + System.exit(1); + } + + + try { + + MessageHandler.logln("transforming to xsl:fo markup"); + // create a Writer + StringWriter writer = new StringWriter(); + + // Use XSLTProcessorFactory to instantiate an XSLTProcessor. + XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + + // Create the 3 objects the XSLTProcessor needs to perform the transformation. + XSLTInputSource xmlSource = new XSLTInputSource (args[0]); + XSLTInputSource xslSheet = new XSLTInputSource (args[1]); + XSLTResultTarget xmlResult = new XSLTResultTarget (writer); + + // Perform the transformation. + processor.process(xmlSource, xslSheet, xmlResult); + + // create a input source containing the xsl:fo file which can be fed to Fop + StringReader reader = new StringReader(writer.toString()); + + //set Driver methods to start Fop processing + Driver driver = new Driver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.setWriter(new PrintWriter(new FileWriter(args[2]))); + driver.buildFOTree(parser, new InputSource(reader)); + driver.format(); + driver.render(); + } catch (Exception e) { + MessageHandler.errorln("FATAL ERROR: " + e.getMessage()); + System.exit(1); + } + } +}