]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Added support for piping:
authorJeremias Maerki <jeremias@apache.org>
Thu, 10 Jul 2008 19:47:12 +0000 (19:47 +0000)
committerJeremias Maerki <jeremias@apache.org>
Thu, 10 Jul 2008 19:47:12 +0000 (19:47 +0000)
- input from stdin (-imagein not supported)
- output to stdout

Syntax: fop -xml # -xsl mystylesheet.xsl -pdf #
(reads the XML from stdin and sends the generated PDF to stdout)

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@675698 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/cli/CommandLineOptions.java
src/java/org/apache/fop/cli/InputHandler.java
src/java/org/apache/fop/cli/Main.java

index 4e5c8ae44cbdd389993c46816181e39d6c44b6c5..c740339b2b3e77533c627e189300554609fe0127 100644 (file)
@@ -59,7 +59,7 @@ public class CommandLineOptions {
     /** Used to indicate that only the result of the XSL transformation should be output */
     public static final int RENDER_NONE = -1;
 
-    /* These following constants are used to describe the input (either .FO, .XML/.XSL or 
+    /* These following constants are used to describe the input (either .FO, .XML/.XSL or
      * intermediate format)
      */
 
@@ -96,11 +96,15 @@ public class CommandLineOptions {
     private int inputmode = NOT_SET;
     /* output mode */
     private String outputmode = null;
+    /* true if System.in (stdin) should be used for the input file */
+    private boolean useStdIn = false;
+    /* true if System.out (stdout) should be used for the output file */
+    private boolean useStdOut = false;
     /* rendering options (for the user agent) */
     private Map renderingOptions = new java.util.HashMap();
     /* target resolution (for the user agent) */
     private int targetResolution = 0;
-    
+
     private FopFactory factory = FopFactory.newInstance();
     private FOUserAgent foUserAgent;
 
@@ -149,7 +153,7 @@ public class CommandLineOptions {
                 }
                 checkSettings();
                 setUserConfig();
-                
+
                 //Factory config is set up, now we can create the user agent
                 foUserAgent = factory.newFOUserAgent();
                 foUserAgent.getRendererOptions().putAll(renderingOptions);
@@ -372,7 +376,12 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the fo file for the '-fo' option");
         } else {
-            fofile = new File(args[i + 1]);
+            String filename = args[i + 1];
+            if (isSystemInOutFile(filename)) {
+                this.useStdIn = true;
+            } else {
+                fofile = new File(filename);
+            }
             return 1;
         }
     }
@@ -396,7 +405,12 @@ public class CommandLineOptions {
             throw new FOPException("you must specify the input file "
                             + "for the '-xml' option");
         } else {
-            xmlfile = new File(args[i + 1]);
+            String filename = args[i + 1];
+            if (isSystemInOutFile(filename)) {
+                this.useStdIn = true;
+            } else {
+                xmlfile = new File(filename);
+            }
             return 1;
         }
     }
@@ -412,7 +426,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the PDF output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             if (pdfAMode != null) {
                 if (renderingOptions.get("pdf-a-mode") != null) {
                     throw new FOPException("PDF/A mode already set");
@@ -423,13 +437,25 @@ public class CommandLineOptions {
         }
     }
 
+    private void setOutputFile(String filename) {
+        if (isSystemInOutFile(filename)) {
+            this.useStdOut = true;
+        } else {
+            outfile = new File(filename);
+        }
+    }
+
+    private boolean isSystemInOutFile(String filename) {
+        return "#".equals(filename);
+    }
+
     private int parseMIFOutputOption(String[] args, int i) throws FOPException {
         setOutputMode(MimeConstants.MIME_MIF);
         if ((i + 1 == args.length)
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the MIF output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -440,7 +466,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the RTF output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -451,7 +477,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the TIFF output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -462,7 +488,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the PNG output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -508,7 +534,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the PDF output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -519,7 +545,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the PostScript output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -530,7 +556,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the text output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -541,7 +567,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the SVG output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -552,7 +578,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the AFP output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -563,7 +589,7 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the FO output file");
         } else {
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         }
     }
@@ -588,7 +614,7 @@ public class CommandLineOptions {
             throw new FOPException("you must specify the output format and the output file");
         } else {
             setOutputMode(mime);
-            outfile = new File(args[i + 2]);
+            setOutputFile(args[i + 2]);
             return 2;
         }
     }
@@ -599,7 +625,7 @@ public class CommandLineOptions {
             fofile = new File(args[i]);
         } else if (outputmode == null) {
             outputmode = MimeConstants.MIME_PDF;
-            outfile = new File(args[i]);
+            setOutputFile(args[i]);
         } else {
             throw new FOPException("Don't know what to do with "
                            + args[i]);
@@ -612,15 +638,15 @@ public class CommandLineOptions {
         if ((i + 1 == args.length)
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the area-tree output file");
-          } else if ((i + 2 == args.length)
+        } else if ((i + 2 == args.length)
                 || (args[i + 2].charAt(0) == '-')) {
             // only output file is specified
-            outfile = new File(args[i + 1]);
+            setOutputFile(args[i + 1]);
             return 1;
         } else {
             // mimic format and output file have been specified
             mimicRenderer = args[i + 1];
-            outfile = new File(args[i + 2]);
+            setOutputFile(args[i + 2]);
             return 2;
         }
     }
@@ -631,7 +657,12 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the Area Tree file for the '-atin' option");
         } else {
-            areatreefile = new File(args[i + 1]);
+            String filename = args[i + 1];
+            if (isSystemInOutFile(filename)) {
+                this.useStdIn = true;
+            } else {
+                areatreefile = new File(filename);
+            }
             return 1;
         }
     }
@@ -642,14 +673,19 @@ public class CommandLineOptions {
                 || (args[i + 1].charAt(0) == '-')) {
             throw new FOPException("you must specify the image file for the '-imagein' option");
         } else {
-            imagefile = new File(args[i + 1]);
+            String filename = args[i + 1];
+            if (isSystemInOutFile(filename)) {
+                this.useStdIn = true;
+            } else {
+                imagefile = new File(filename);
+            }
             return 1;
         }
     }
 
     private PDFEncryptionParams getPDFEncryptionParams() throws FOPException {
         PDFEncryptionParams params = (PDFEncryptionParams)renderingOptions.get(
-                        PDFRenderer.ENCRYPTION_PARAMS); 
+                        PDFRenderer.ENCRYPTION_PARAMS);
         if (params == null) {
             if (!PDFEncryptionManager.checkAvailableAlgorithms()) {
                 throw new FOPException("PDF encryption requested but it is not available."
@@ -760,7 +796,7 @@ public class CommandLineOptions {
 
         if (inputmode == XSLT_INPUT) {
             // check whether xml *and* xslt file have been set
-            if (xmlfile == null) {
+            if (xmlfile == null && !this.useStdIn) {
                 throw new FOPException("XML file must be specified for the transform mode");
             }
             if (xsltfile == null) {
@@ -777,7 +813,7 @@ public class CommandLineOptions {
                                        + "\n  fofile: "
                                        + fofile.getAbsolutePath());
             }
-            if (!xmlfile.exists()) {
+            if (xmlfile != null && !xmlfile.exists()) {
                 throw new FileNotFoundException("Error: xml file "
                                                 + xmlfile.getAbsolutePath()
                                                 + " not found ");
@@ -795,10 +831,10 @@ public class CommandLineOptions {
             }
             if (xmlfile != null || xsltfile != null) {
                 log.warn("fo input mode, but xmlfile or xslt file are set:");
-                log.error("xml file: " + xmlfile.toString());
-                log.error("xslt file: " + xsltfile.toString());
+                log.error("xml file: " + xmlfile);
+                log.error("xslt file: " + xsltfile);
             }
-            if (!fofile.exists()) {
+            if (fofile != null && !fofile.exists()) {
                 throw new FileNotFoundException("Error: fo file "
                                                 + fofile.getAbsolutePath()
                                                 + " not found ");
@@ -813,10 +849,10 @@ public class CommandLineOptions {
             }
             if (xmlfile != null || xsltfile != null) {
                 log.warn("area tree input mode, but xmlfile or xslt file are set:");
-                log.error("xml file: " + xmlfile.toString());
-                log.error("xslt file: " + xsltfile.toString());
+                log.error("xml file: " + xmlfile);
+                log.error("xslt file: " + xsltfile);
             }
-            if (!areatreefile.exists()) {
+            if (areatreefile != null && !areatreefile.exists()) {
                 throw new FileNotFoundException("Error: area tree file "
                                               + areatreefile.getAbsolutePath()
                                               + " not found ");
@@ -830,7 +866,7 @@ public class CommandLineOptions {
                 log.warn("image input mode, but XML file is set:");
                 log.error("XML file: " + xmlfile.toString());
             }
-            if (!imagefile.exists()) {
+            if (imagefile != null && !imagefile.exists()) {
                 throw new FileNotFoundException("Error: image file "
                                               + imagefile.getAbsolutePath()
                                               + " not found ");
@@ -944,6 +980,22 @@ public class CommandLineOptions {
         return suppressLowLevelAreas;
     }
 
+    /**
+     * Indicates whether input comes from standard input (stdin).
+     * @return true if input comes from standard input (stdin)
+     */
+    public boolean isInputFromStdIn() {
+        return this.useStdIn;
+    }
+
+    /**
+     * Indicates whether output is sent to standard output (stdout).
+     * @return true if output is sent to standard output (stdout)
+     */
+    public boolean isOutputToStdOut() {
+        return this.useStdOut;
+    }
+
     /**
      * Returns the input file.
      * @return either the fofile or the xmlfile
@@ -986,15 +1038,17 @@ public class CommandLineOptions {
             + "                    (Examples for prof: PDF/A-1b or PDF/X-3:2003)\n\n"
             + " [INPUT]  \n"
             + "  infile            xsl:fo input file (the same as the next) \n"
+            + "                    (use # for infile to pipe input from stdin)\n"
             + "  -fo  infile       xsl:fo input file  \n"
             + "  -xml infile       xml input file, must be used together with -xsl \n"
             + "  -atin infile      area tree input file \n"
-            + "  -imagein infile   image input file \n"
+            + "  -imagein infile   image input file (piping through stdin not supported)\n"
             + "  -xsl stylesheet   xslt stylesheet \n \n"
             + "  -param name value <value> to use for parameter <name> in xslt stylesheet\n"
             + "                    (repeat '-param name value' for each parameter)\n \n"
             + " [OUTPUT] \n"
             + "  outfile           input will be rendered as PDF into outfile\n"
+            + "                    (use # for outfile to pipe output to stdout)\n"
             + "  -pdf outfile      input will be rendered as PDF (outfile req'd)\n"
             + "  -pdfa1b outfile   input will be rendered as PDF/A-1b compliant PDF\n"
             + "                    (outfile req'd, same as \"-pdf outfile -pdfprofile PDF/A-1b\")\n"
@@ -1027,6 +1081,7 @@ public class CommandLineOptions {
             + "  Fop -fo foo.fo -pdf foo.pdf (does the same as the previous line)\n"
             + "  Fop -xml foo.xml -xsl foo.xsl -pdf foo.pdf\n"
             + "  Fop -xml foo.xml -xsl foo.xsl -foout foo.fo\n"
+            + "  Fop -xml # -xsl foo.xsl -pdf #\n"
             + "  Fop foo.fo -mif foo.mif\n"
             + "  Fop foo.fo -rtf foo.rtf\n"
             + "  Fop foo.fo -print\n"
@@ -1057,11 +1112,19 @@ public class CommandLineOptions {
             break;
         case FO_INPUT:
             log.info("FO ");
-            log.info("fo input file: " + fofile.toString());
+            if (this.useStdIn) {
+                log.info("fo input file: from stdin");
+            } else {
+                log.info("fo input file: " + fofile.toString());
+            }
             break;
         case XSLT_INPUT:
             log.info("xslt transformation");
-            log.info("xml input file: " + xmlfile.toString());
+            if (this.useStdIn) {
+                log.info("xml input file: from stdin");
+            } else {
+                log.info("xml input file: " + xmlfile.toString());
+            }
             log.info("xslt stylesheet: " + xsltfile.toString());
             break;
         default:
@@ -1074,7 +1137,7 @@ public class CommandLineOptions {
             log.info("awt on screen");
             if (outfile != null) {
                 log.error("awt mode, but outfile is set:");
-                log.info("out file: " + outfile.toString());
+                log.error("out file: " + outfile.toString());
             }
         } else if (MimeConstants.MIME_FOP_PRINT.equals(outputmode)) {
             log.info("print directly");
@@ -1087,10 +1150,18 @@ public class CommandLineOptions {
             if (mimicRenderer != null) {
               log.info("mimic renderer: " + mimicRenderer);
             }
-            log.info("output file: " + outfile.toString());
+            if (this.useStdOut) {
+                log.info("output file: to stdout");
+            } else {
+                log.info("output file: " + outfile.toString());
+            }
         } else {
             log.info(outputmode);
-            log.info("output file: " + outfile.toString());
+            if (this.useStdOut) {
+                log.info("output file: to stdout");
+            } else {
+                log.info("output file: " + outfile.toString());
+            }
         }
 
         log.info("OPTIONS");
index 7ad89bfab39daf5c03eb8022aa485e0f500f5110..b3ea35e0d7c2bac5635ffcdca44f8727994e45b9 100644 (file)
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,8 +21,8 @@ package org.apache.fop.cli;
 
 // Imported java.io classes
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Vector;
 
@@ -58,7 +58,7 @@ import org.apache.fop.render.awt.viewer.Renderable;
  * parameters) or FO File input alone
  */
 public class InputHandler implements ErrorListener, Renderable {
-     
+
     /** original source file */
     protected File sourcefile = null;
     private File stylesheet = null;  // for XML/XSLT usage
@@ -66,12 +66,12 @@ public class InputHandler implements ErrorListener, Renderable {
 
     /** the logger */
     protected Log log = LogFactory.getLog(InputHandler.class);
-    
+
     /**
      * Constructor for XML->XSLT->FO input
      * @param xmlfile XML file
      * @param xsltfile XSLT file
-     * @param params Vector of command-line parameters (name, value, 
+     * @param params Vector of command-line parameters (name, value,
      *      name, value, ...) for XSL stylesheet, null if none
      */
     public InputHandler(File xmlfile, File xsltfile, Vector params) {
@@ -95,7 +95,7 @@ public class InputHandler implements ErrorListener, Renderable {
      * @param out the output stream to write the generated output to (may be null if not applicable)
      * @throws FOPException in case of an error during processing
      */
-    public void renderTo(FOUserAgent userAgent, String outputFormat, OutputStream out) 
+    public void renderTo(FOUserAgent userAgent, String outputFormat, OutputStream out)
                 throws FOPException {
 
         FopFactory factory = userAgent.getFactory();
@@ -107,7 +107,7 @@ public class InputHandler implements ErrorListener, Renderable {
         }
 
         // if base URL was not explicitly set in FOUserAgent, obtain here
-        if (fop.getUserAgent().getBaseURL() == null) {
+        if (fop.getUserAgent().getBaseURL() == null && sourcefile != null) {
             String baseURL = null;
 
             try {
@@ -124,7 +124,7 @@ public class InputHandler implements ErrorListener, Renderable {
 
         transformTo(res);
     }
-    
+
     /** {@inheritDoc} */
     public void renderTo(FOUserAgent userAgent, String outputFormat) throws FOPException {
         renderTo(userAgent, outputFormat, null);
@@ -140,34 +140,53 @@ public class InputHandler implements ErrorListener, Renderable {
         Result res = new StreamResult(out);
         transformTo(res);
     }
-    
+
     /**
      * Creates a Source for the main input file. Processes XInclude if
      * available in the XML parser.
-     * 
+     *
      * @return the Source for the main input file
      */
     protected Source createMainSource() {
         Source result;
+        InputStream in;
+        String uri;
+        if (this.sourcefile != null) {
+            try {
+                in = new java.io.FileInputStream(this.sourcefile);
+                uri = this.sourcefile.toURI().toASCIIString();
+            } catch (FileNotFoundException e) {
+                //handled elsewhere
+                return new StreamSource(this.sourcefile);
+            }
+        } else {
+            in = System.in;
+            uri = null;
+        }
         try {
-            InputSource is = new InputSource(new FileInputStream(
-                    this.sourcefile));
-            is.setSystemId(this.sourcefile.toURI().toASCIIString());
+            InputSource is = new InputSource(in);
+            is.setSystemId(uri);
             SAXParserFactory spf = SAXParserFactory.newInstance();
             spf.setFeature("http://xml.org/sax/features/namespaces", true);
             spf.setFeature("http://apache.org/xml/features/xinclude", true);
             XMLReader xr = spf.newSAXParser().getXMLReader();
             result = new SAXSource(xr, is);
         } catch (SAXException e) {
-            result = new StreamSource(this.sourcefile);
-        } catch (IOException e) {
-            result = new StreamSource(this.sourcefile);
+            if (this.sourcefile != null) {
+                result = new StreamSource(this.sourcefile);
+            } else {
+                result = new StreamSource(in, uri);
+            }
         } catch (ParserConfigurationException e) {
-            result = new StreamSource(this.sourcefile);
+            if (this.sourcefile != null) {
+                result = new StreamSource(this.sourcefile);
+            } else {
+                result = new StreamSource(in, uri);
+            }
         }
         return result;
     }
-    
+
     /**
      * Creates a Source for the selected stylesheet.
      * @return the Source for the selected stylesheet or null if there's no stylesheet
@@ -179,7 +198,7 @@ public class InputHandler implements ErrorListener, Renderable {
             return null;
         }
     }
-    
+
     /**
      * Transforms the input document to the input format expected by FOP using XSLT.
      * @param result the Result object where the result of the XSL transformation is sent to
@@ -190,15 +209,15 @@ public class InputHandler implements ErrorListener, Renderable {
             // Setup XSLT
             TransformerFactory factory = TransformerFactory.newInstance();
             Transformer transformer;
-            
+
             Source xsltSource = createXSLTSource();
             if (xsltSource == null) {   // FO Input
                 transformer = factory.newTransformer();
             } else {    // XML/XSLT input
                 transformer = factory.newTransformer(xsltSource);
-            
+
                 // Set the value of parameters, if any, defined for stylesheet
-                if (xsltParams != null) { 
+                if (xsltParams != null) {
                     for (int i = 0; i < xsltParams.size(); i += 2) {
                         transformer.setParameter((String) xsltParams.elementAt(i),
                             (String) xsltParams.elementAt(i + 1));
index 43da8d966d703c727cc7f6fe857e62be9f439194..545aef7ff7c3abfc25f47d002afc253c2964b5fe 100644 (file)
@@ -62,7 +62,7 @@ public class Main {
             fopJar = new File(baseDir, "fop.jar");
         }
         if (!fopJar.exists()) {
-            throw new RuntimeException("fop.jar not found in directory: " 
+            throw new RuntimeException("fop.jar not found in directory: "
                     + baseDir.getAbsolutePath() + " (or below)");
         }
         List jars = new java.util.ArrayList();
@@ -99,7 +99,7 @@ public class Main {
         }*/
         return urls;
     }
-    
+
     /**
      * @return true if FOP's dependecies are available in the current ClassLoader setup.
      */
@@ -115,7 +115,7 @@ public class Main {
             return false;
         }
     }
-    
+
     /**
      * Dynamically builds a ClassLoader and executes FOP.
      * @param args command-line arguments
@@ -123,7 +123,7 @@ public class Main {
     public static void startFOPWithDynamicClasspath(String[] args) {
         try {
             URL[] urls = getJARList();
-            //System.out.println("CCL: " 
+            //System.out.println("CCL: "
             //    + Thread.currentThread().getContextClassLoader().toString());
             ClassLoader loader = new java.net.URLClassLoader(urls, null);
             Thread.currentThread().setContextClassLoader(loader);
@@ -137,13 +137,13 @@ public class Main {
             System.exit(-1);
         }
     }
-    
+
     /**
      * Executes FOP with the given ClassLoader setup.
      * @param args command-line arguments
      */
     public static void startFOP(String[] args) {
-        //System.out.println("static CCL: " 
+        //System.out.println("static CCL: "
         //    + Thread.currentThread().getContextClassLoader().toString());
         //System.out.println("static CL: " + Fop.class.getClassLoader().toString());
         CommandLineOptions options = null;
@@ -155,7 +155,7 @@ public class Main {
             if (!options.parse(args)) {
                 System.exit(1);
             }
-            
+
             foUserAgent = options.getFOUserAgent();
             String outputFormat = options.getOutputFormat();
 
@@ -164,6 +164,8 @@ public class Main {
                     out = new java.io.BufferedOutputStream(
                             new java.io.FileOutputStream(options.getOutputFile()));
                     foUserAgent.setOutputFile(options.getOutputFile());
+                } else if (options.isOutputToStdOut()) {
+                    out = new java.io.BufferedOutputStream(System.out);
                 }
                 if (!MimeConstants.MIME_XSL_FO.equals(outputFormat)) {
                     options.getInputHandler().renderTo(foUserAgent, outputFormat, out);
@@ -190,7 +192,7 @@ public class Main {
             System.exit(1);
         }
     }
-    
+
     /**
      * The main routine for the command line interface
      * @param args the command line parameters