xmlgraphics-fop-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jerem...@apache.org
Subject svn commit: r649146 - in /xmlgraphics/fop/trunk: ./ src/java/org/apache/fop/cli/ src/java/org/apache/fop/render/java2d/ src/java/org/apache/fop/render/print/
Date Thu, 17 Apr 2008 15:12:28 GMT
Author: jeremias
Date: Thu Apr 17 08:12:23 2008
New Revision: 649146

URL: http://svn.apache.org/viewvc?rev=649146&view=rev
Log:
Bugzilla #41687:
Restored ability to specify from/to and odd/even pages as well as the number of copies for
printing from the command-line. Note that this is no longer done via system properties but
through the renderer options. Syntax is slightly different. See "fop -print help".

Added:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java   (with props)
Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/CommandLineOptions.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/Main.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PrintRenderer.java
    xmlgraphics/fop/trunk/status.xml

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/CommandLineOptions.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/CommandLineOptions.java?rev=649146&r1=649145&r2=649146&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/CommandLineOptions.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/CommandLineOptions.java Thu Apr 17 08:12:23
2008
@@ -46,6 +46,8 @@
 import org.apache.fop.render.Renderer;
 import org.apache.fop.render.awt.AWTRenderer;
 import org.apache.fop.render.pdf.PDFRenderer;
+import org.apache.fop.render.print.PagesMode;
+import org.apache.fop.render.print.PrintRenderer;
 import org.apache.fop.render.xml.XMLRenderer;
 import org.apache.fop.util.CommandLineLogger;
 
@@ -133,8 +135,9 @@
      * @throws FOPException for general errors
      * @throws FileNotFoundException if an input file wasn't found
      * @throws IOException if the the configuration file could not be loaded
+     * @return true if the processing can continue, false to abort
      */
-    public void parse(String[] args)
+    public boolean parse(String[] args)
             throws FOPException, IOException {
         boolean optionsParsed = true;
 
@@ -155,6 +158,8 @@
                 }
                 addXSLTParameter("fop-output-format", getOutputFormat());
                 addXSLTParameter("fop-version", Version.getVersion());
+            } else {
+                return false;
             }
         } catch (FOPException e) {
             printUsage();
@@ -193,6 +198,7 @@
             //Make sure the prepared XMLRenderer is used
             foUserAgent.setRendererOverride(xmlRenderer);
         }
+        return true;
     }
 
     /**
@@ -268,7 +274,6 @@
             } else if (args[i].equals("-png")) {
                 i = i + parsePNGOutputOption(args, i);
             } else if (args[i].equals("-print")) {
-                i = i + parsePrintOutputOption(args, i);
                 // show print help
                 if (i + 1 < args.length) {
                     if (args[i + 1].equals("help")) {
@@ -276,6 +281,9 @@
                         return false;
                     }
                 }
+                i = i + parsePrintOutputOption(args, i);
+            } else if (args[i].equals("-copies")) {
+                i = i + parseCopiesOption(args, i);
             } else if (args[i].equals("-pcl")) {
                 i = i + parsePCLOutputOption(args, i);
             } else if (args[i].equals("-ps")) {
@@ -302,7 +310,7 @@
                       String expression = args[++i];
                       addXSLTParameter(name, expression);
                   } else {
-                    throw new FOPException("invalid param usage: use -param <name>
<value>");
+                      throw new FOPException("invalid param usage: use -param <name>
<value>");
                   }
             } else if (args[i].equals("-o")) {
                 i = i + parsePDFOwnerPassword(args, i);
@@ -461,7 +469,37 @@
 
     private int parsePrintOutputOption(String[] args, int i) throws FOPException {
         setOutputMode(MimeConstants.MIME_FOP_PRINT);
-        return 0;
+        if ((i + 1 <= args.length)
+                && (args[i + 1].charAt(0) != '-')) {
+            String arg = args[i + 1];
+            String[] parts = arg.split(",");
+            for (int j = 0; j < parts.length; j++) {
+                String s = parts[j];
+                if (s.matches("\\d+")) {
+                    renderingOptions.put(PrintRenderer.START_PAGE, new Integer(s));
+                } else if (s.matches("\\d+-\\d+")) {
+                    String[] startend = s.split("-");
+                    renderingOptions.put(PrintRenderer.START_PAGE, new Integer(startend[0]));
+                    renderingOptions.put(PrintRenderer.END_PAGE, new Integer(startend[1]));
+                } else {
+                    PagesMode mode = PagesMode.byName(s);
+                    renderingOptions.put(PrintRenderer.PAGES_MODE, mode);
+                }
+            }
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    private int parseCopiesOption(String[] args, int i) throws FOPException {
+        if ((i + 1 == args.length)
+                || (args[i + 1].charAt(0) == '-')) {
+            throw new FOPException("you must specify the number of copies");
+        } else {
+            renderingOptions.put(PrintRenderer.COPIES, new Integer(args[i + 1]));
+            return 1;
+        }
     }
 
     private int parsePCLOutputOption(String[] args, int i) throws FOPException {
@@ -991,18 +1029,21 @@
             + "  Fop -xml foo.xml -xsl foo.xsl -foout foo.fo\n"
             + "  Fop foo.fo -mif foo.mif\n"
             + "  Fop foo.fo -rtf foo.rtf\n"
-            + "  Fop foo.fo -print or Fop -print foo.fo \n"
-            + "  Fop foo.fo -awt \n");
+            + "  Fop foo.fo -print\n"
+            + "  Fop foo.fo -awt\n");
     }
 
     /**
      * shows the options for print output
      */
     private void printUsagePrintOutput() {
-        System.err.println("USAGE: -print [-Dstart=i] [-Dend=i] [-Dcopies=i] [-Deven=true|false]
"
-                           + " org.apache.fop.apps.Fop (..) -print \n"
-                           + "Example:\n"
-                           + "java -Dstart=1 -Dend=2 org.apache.Fop.apps.Fop infile.fo -print
");
+        System.err.println("USAGE: -print [from[-to][,even|odd]] [-copies numCopies]\n\n"
+           + "Example:\n"
+           + "all pages:                        Fop infile.fo -print\n"
+           + "all pages with two copies:        Fop infile.fo -print -copies 2\n"
+           + "all pages starting with page 7:   Fop infile.fo -print 7\n"
+           + "pages 2 to 3:                     Fop infile.fo -print 2-3\n"
+           + "only even page between 10 and 20: Fop infile.fo -print 10-20,even\n");
     }
 
     /**

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/Main.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/Main.java?rev=649146&r1=649145&r2=649146&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/Main.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/cli/Main.java Thu Apr 17 08:12:23 2008
@@ -28,6 +28,7 @@
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 
@@ -151,7 +152,9 @@
 
         try {
             options = new CommandLineOptions();
-            options.parse(args);
+            if (!options.parse(args)) {
+                System.exit(1);
+            }
             
             foUserAgent = options.getFOUserAgent();
             String outputFormat = options.getOutputFormat();

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DRenderer.java?rev=649146&r1=649145&r2=649146&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DRenderer.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DRenderer.java Thu Apr
17 08:12:23 2008
@@ -121,9 +121,6 @@
     /** The 0-based current page number */
     private int currentPageNumber = 0;
 
-    /** The 0-based total number of rendered pages */
-    private int numberOfPages;
-
     /** true if antialiasing is set */
     protected boolean antialiasing = true;
 
@@ -208,7 +205,7 @@
     public void stopRenderer() throws IOException {
         log.debug("Java2DRenderer stopped");
         renderingDone = true;
-        numberOfPages = currentPageNumber;
+        int numberOfPages = currentPageNumber;
         // TODO set all vars to null for gc
         if (numberOfPages == 0) {
             new FOPException("No page could be rendered");
@@ -238,7 +235,7 @@
      * @return The 0-based total number of rendered pages
      */
     public int getNumberOfPages() {
-            return numberOfPages;
+        return pageViewportList.size();
     }
 
     /**

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java?rev=649146&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java Thu Apr 17 08:12:23
2008
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.render.print;
+
+/** Enum class for pages mode (all, even, odd pages). */
+public final class PagesMode {
+
+    /** the all pages mode */
+    public static final PagesMode ALL = new PagesMode("all");
+    /** the even pages mode */
+    public static final PagesMode EVEN = new PagesMode("even");
+    /** the odd pages mode */
+    public static final PagesMode ODD = new PagesMode("odd");
+    
+    private String name;
+
+    /**
+     * Constructor to add a new named item.
+     * @param name Name of the item.
+     */
+    private PagesMode(String name) {
+        this.name = name;
+    }
+
+    /** @return the name of the enum */
+    public String getName() {
+        return this.name;
+    }
+    
+    /**
+     * Returns a PagesMode instance by name.
+     * @param name the name of the pages mode
+     * @return the pages mode
+     */
+    public static PagesMode byName(String name) {
+        if (PagesMode.ALL.getName().equalsIgnoreCase(name)) {
+            return PagesMode.ALL;
+        } else if (PagesMode.EVEN.getName().equalsIgnoreCase(name)) {
+            return PagesMode.EVEN;
+        } else if (PagesMode.ODD.getName().equalsIgnoreCase(name)) {
+            return PagesMode.ODD;
+        } else {
+            throw new IllegalArgumentException("Invalid value for PagesMode: " + name);
+        }
+    }
+    
+    /** {@inheritDoc} */
+    public String toString() {
+        return "PagesMode:" + name;
+    }
+    
+}

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PrintRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PrintRenderer.java?rev=649146&r1=649145&r2=649146&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PrintRenderer.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PrintRenderer.java Thu Apr
17 08:12:23 2008
@@ -48,18 +48,35 @@
      */
     public static final String PRINTER_JOB = "printerjob";
   
-  
-    private static final int EVEN_AND_ALL = 0;
-
-    private static final int EVEN = 1;
+    /**
+     * Printing parameter: the pages to be printed (all, even or odd),
+     * datatype: the strings "all", "even" or "odd" or one of PagesMode.*
+     */
+    public static final String PAGES_MODE = "even-odd";
 
-    private static final int ODD = 2;
+    /**
+     * Printing parameter: the page number (1-based) of the first page to be printed,
+     * datatype: a positive Integer
+     */
+    public static final String START_PAGE = "start-page";
 
+    /**
+     * Printing parameter: the page number (1-based) of the last page to be printed,
+     * datatype: a positive Integer
+     */
+    public static final String END_PAGE = "end-page";
+    
+    /**
+     * Printing parameter: the number of copies of the document to be printed,
+     * datatype: a positive Integer
+     */
+    public static final String COPIES = "copies";
+    
+    
     private int startNumber = 0;
-
     private int endNumber = -1;
 
-    private int mode = EVEN_AND_ALL;
+    private PagesMode mode = PagesMode.ALL;
 
     private int copies = 1;
 
@@ -104,11 +121,11 @@
         //TODO Remove me! This is not a beautiful way to do this.
         // read from command-line options
         copies = getIntProperty("copies", 1);
-        startNumber = getIntProperty("start", 1) - 1;
+        startNumber = getIntProperty("start", 1);
         endNumber = getIntProperty("end", -1);
         String str = System.getProperty("even");
         if (str != null) {
-            mode = Boolean.valueOf(str).booleanValue() ? EVEN : ODD;
+            mode = Boolean.valueOf(str).booleanValue() ? PagesMode.EVEN : PagesMode.ODD;
         }
     }
     
@@ -129,9 +146,53 @@
             printerJob = (PrinterJob)printerJobO;
             printerJob.setPageable(this);
         }
+        Object o = rendererOptions.get(PrintRenderer.PAGES_MODE);
+        if (o != null) {
+            if (o instanceof PagesMode) {
+                this.mode = (PagesMode)o;
+            } else if (o instanceof String) {
+                this.mode = PagesMode.byName((String)o);
+            } else {
+                throw new IllegalArgumentException(
+                        "Renderer option " + PrintRenderer.PAGES_MODE
+                        + " must be an 'all', 'even', 'odd' or a PagesMode instance.");
+            }
+        }
+        
+        o = rendererOptions.get(PrintRenderer.START_PAGE);
+        if (o != null) {
+            this.startNumber = getPositiveInteger(o);
+        }
+        o = rendererOptions.get(PrintRenderer.END_PAGE);
+        if (o != null) {
+            this.endNumber = getPositiveInteger(o);
+        }
+        if (this.endNumber >= 0 && this.endNumber < this.endNumber) {
+            this.endNumber = this.startNumber;
+        }
+        o = rendererOptions.get(PrintRenderer.COPIES);
+        if (o != null) {
+            this.copies = getPositiveInteger(o);
+        }
         initializePrinterJob();
     }
 
+    private int getPositiveInteger(Object o) {
+        if (o instanceof Integer) {
+            Integer i = (Integer)o;
+            if (i.intValue() < 1) {
+                throw new IllegalArgumentException(
+                        "Value must be a positive Integer");
+            }
+            return i.intValue();
+        } else if (o instanceof String) {
+            return Integer.parseInt((String)o);
+        } else {
+            throw new IllegalArgumentException(
+                    "Value must be a positive integer");
+        }
+    }
+    
     /** @return the PrinterJob instance that this renderer prints to */
     public PrinterJob getPrinterJob() {
         return this.printerJob;
@@ -174,7 +235,8 @@
 
         Vector numbers = getInvalidPageNumbers();
         for (int i = numbers.size() - 1; i > -1; i--) {
-            // removePage(Integer.parseInt((String)numbers.elementAt(i)));
+            int page = ((Integer)numbers.elementAt(i)).intValue();
+            pageViewportList.remove(page - 1);
         }
 
         try {
@@ -204,20 +266,20 @@
         Vector vec = new Vector();
         int max = getNumberOfPages();
         boolean isValid;
-        for (int i = 0; i < max; i++) {
+        for (int i = 1; i <= max; i++) {
             isValid = true;
             if (i < startNumber || i > endNumber) {
                 isValid = false;
-            } else if (mode != EVEN_AND_ALL) {
-                if (mode == EVEN && ((i + 1) % 2 != 0)) {
+            } else if (mode != PagesMode.ALL) {
+                if (mode == PagesMode.EVEN && (i % 2 != 0)) {
                     isValid = false;
-                } else if (mode == ODD && ((i + 1) % 2 != 1)) {
+                } else if (mode == PagesMode.ODD && (i % 2 == 0)) {
                     isValid = false;
                 }
             }
 
             if (!isValid) {
-                vec.add(Integer.toString(i));
+                vec.add(new Integer(i));
             }
         }
         return vec;

Modified: xmlgraphics/fop/trunk/status.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=649146&r1=649145&r2=649146&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Thu Apr 17 08:12:23 2008
@@ -58,6 +58,10 @@
         Added SVG support for AFP (GOCA).
         </action>
       -->
+      <action context="Renderers" dev="JM" type="add" fixes-bug="41687">
+        Restored ability to specify from/to and odd/even pages as well as the number of copies
+        for printing from the command-line.
+      </action>
       <action context="Renderers" dev="JM" type="add" fixes-bug="44678" due-to="Antti
Karanta">
         Added ability to pass a preconfigured PrinterJob instance to the PrintRenderer via
         the rendering options map.



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org


Mime
View raw message