]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Added: format and print class
authorarved <arved@unknown>
Tue, 4 Apr 2000 09:45:11 +0000 (09:45 +0000)
committerarved <arved@unknown>
Tue, 4 Apr 2000 09:45:11 +0000 (09:45 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193323 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/apps/PrintCommandLine.java [new file with mode: 0755]

diff --git a/src/org/apache/fop/apps/PrintCommandLine.java b/src/org/apache/fop/apps/PrintCommandLine.java
new file mode 100755 (executable)
index 0000000..338b947
--- /dev/null
@@ -0,0 +1,186 @@
+package org.apache.fop.apps;
+
+/*
+  originally contributed by
+  Stanislav Gorkhover: stanislav.gorkhover@jcatalog.com
+  jCatalog Software AG
+ */
+
+
+import org.xml.sax.Parser;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import java.awt.Graphics;
+import java.awt.print.*;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.util.Vector;
+
+import org.apache.fop.render.awt.AWTRenderer;
+import org.apache.fop.layout.AreaTree;
+import org.apache.fop.layout.Page;
+
+
+/**
+ * This class prints a xsl-fo dokument without interaction.
+ * At the moment java has not the possibility to configure the printer and it's
+ * options without interaction (30.03.2000).
+ * This class allows to print a set of pages (from-to), even/odd pages and many copies.
+ * - Print from page xxx: property name - start, value int
+ * - Print to page xxx: property name - end, value int
+ * - Print even/odd pages: property name - even, value boolean
+ * - Print xxx copies: property name - copies, value int
+ *
+ */
+public class PrintCommandLine extends CommandLine {
+
+
+  public static void main(String[] args) {
+
+    String version = Version.getVersion();
+    System.err.println(version);
+
+    if (args.length != 1) {
+      System.err.println("usage: java [-Dstart=i] [-Dend=i]"
+        + " [-Dcopies=i] [-Deven=true|false]"
+        + " org.apache.fop.apps.PrintCommandLine formatting-object-file");
+      System.exit(1);
+    }
+
+    Parser parser = createParser();
+
+    if (parser == null) {
+      System.err.println("ERROR: Unable to create SAX parser");
+      System.exit(1);
+    }
+
+    PrintRenderer renderer = new PrintRenderer();
+    try {
+      Driver driver = new Driver();
+
+      driver.setRenderer(renderer);
+      driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+      driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+      driver.buildFOTree(parser, fileInputSource(args[0]));
+      driver.format();
+      driver.render();
+    } catch (Exception e) {
+      System.err.println("FATAL ERROR: " + e.getMessage());
+      System.exit(1);
+    }
+
+    int copies = PrintRenderer.getIntProperty("copies", 1);
+    renderer.setCopies(copies);
+
+    PrinterJob pj = PrinterJob.getPrinterJob();
+    pj.setPageable(renderer);
+
+    pj.setCopies(copies);
+    try {
+      pj.print();
+    } catch(PrinterException pe) {
+      pe.printStackTrace();
+    }
+  }
+
+
+  static class PrintRenderer extends AWTRenderer {
+
+    static int EVEN_AND_ALL = 0;
+    static int EVEN = 1;
+    static int ODD = 2;
+
+    int startNumber;
+    int endNumber;
+    int mode = EVEN_AND_ALL;
+    int copies = 1;
+
+    PrintRenderer() {
+      super(null);
+
+      startNumber = getIntProperty("start", 1) - 1;
+      endNumber = getIntProperty("end", -1);
+
+      mode = EVEN_AND_ALL;
+      String str = System.getProperty("even");
+      if (str != null) {
+        try {
+          mode = Boolean.valueOf(str).booleanValue() ? EVEN : ODD;
+        } catch (Exception e) {
+        }
+      }
+
+    }
+
+
+    static int getIntProperty(String name, int def) {
+      String propValue = System.getProperty(name);
+      if (propValue != null) {
+        try {
+          return Integer.parseInt(propValue);
+        } catch(Exception e) {
+          return def;
+        }
+      }
+      else {
+        return def;
+      }
+    }
+
+    public void render(AreaTree areaTree, PrintWriter writer) throws IOException {
+      tree = areaTree;
+      if (endNumber == -1) {
+        endNumber = tree.getPages().size();
+      }
+
+      Vector numbers = getInvalidPageNumbers();
+      for (int i = numbers.size() - 1; i > -1; i--)
+        tree.getPages().removeElementAt(Integer.parseInt((String)numbers.elementAt(i)));
+
+    }
+
+    public void renderPage(Page page) {
+      pageWidth  = (int)((float)page.getWidth() / 1000f);
+      pageHeight = (int)((float)page.getHeight() / 1000f);
+      super.renderPage(page);
+    }
+
+
+    private Vector getInvalidPageNumbers() {
+
+      Vector vec = new Vector();
+      int max = tree.getPages().size();
+      boolean isValid;
+      for (int i = 0; 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))
+            isValid = false;
+          else if (mode == ODD && ((i + 1) % 2 != 1))
+            isValid = false;
+        }
+
+        if (!isValid)
+          vec.add(i + "");
+      }
+
+      return vec;
+    }
+
+    void setCopies(int val) {
+      copies = val;
+      Vector copie = tree.getPages();
+      for (int i = 1; i < copies; i++) {
+        tree.getPages().addAll(copie);
+      }
+
+    }
+
+  } // class PrintRenderer
+} // class PrintCommandLine
+