]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
allows input of xml file + xslt file to produce pdf file. Doesn't handle larger files.
authorfotis <fotis@unknown>
Sat, 22 Jul 2000 09:12:12 +0000 (09:12 +0000)
committerfotis <fotis@unknown>
Sat, 22 Jul 2000 09:12:12 +0000 (09:12 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193551 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/apps/XalanCommandLine.java [new file with mode: 0644]

diff --git a/src/org/apache/fop/apps/XalanCommandLine.java b/src/org/apache/fop/apps/XalanCommandLine.java
new file mode 100644 (file)
index 0000000..2d85948
--- /dev/null
@@ -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 <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+
+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);
+    }
+  }
+}