You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2008/04/17 15:33:10 UTC

svn commit: r649091 - in /xmlgraphics/fop/trunk: examples/embedding/java/embedding/ExampleFO2OldStylePrint.java src/java/org/apache/fop/render/print/PrintRenderer.java status.xml

Author: jeremias
Date: Thu Apr 17 06:33:07 2008
New Revision: 649091

URL: http://svn.apache.org/viewvc?rev=649091&view=rev
Log:
Bugzilla #44678:
Added ability to pass in the PrinterJob instance through the renderer options.
Submitted by: Antti Karanta <Antti.Karanta.at.napa.fi>

Modifications/Additions to patch:
- Don't remove the contructor with the PrinterJob parameter, just deprecate it.
- Adjust old-style print example to use renderer options

Modified:
    xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PrintRenderer.java
    xmlgraphics/fop/trunk/status.xml

Modified: xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java?rev=649091&r1=649090&r2=649091&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java (original)
+++ xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java Thu Apr 17 06:33:07 2008
@@ -24,21 +24,18 @@
 import java.io.File;
 import java.io.IOException;
 
-//JAXP
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Source;
-import javax.xml.transform.Result;
-import javax.xml.transform.stream.StreamSource;
 import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamSource;
 
-
-// FOP
+import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
-import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FopFactory;
-import org.apache.fop.render.print.PrintRenderer;
+import org.apache.fop.apps.MimeConstants;
 
 /**
  * This class demonstrates printing an FO file to a PrinterJob instance.
@@ -63,15 +60,10 @@
         try {
             //Set up a custom user agent so we can supply our own renderer instance
             FOUserAgent userAgent = fopFactory.newFOUserAgent();
+            userAgent.getRendererOptions().put("printerjob", printerJob);
 
-            //Set up our own PrintRenderer instance so we can supply a special PrinterJob instance.
-            PrintRenderer renderer = new PrintRenderer(printerJob);
-            renderer.setUserAgent(userAgent);
-            
-            userAgent.setRendererOverride(renderer);
-            
-            // Construct fop with desired output format (here, it is set through the user agent)
-            Fop fop = fopFactory.newFop(userAgent);
+            // Construct FOP with desired output format
+            Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_PRINT, userAgent);
 
             // Setup JAXP using identity transformer
             TransformerFactory factory = TransformerFactory.newInstance();

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=649091&r1=649090&r2=649091&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 06:33:07 2008
@@ -27,9 +27,11 @@
 import java.awt.print.PrinterException;
 import java.awt.print.PrinterJob;
 import java.io.IOException;
+import java.util.Map;
 import java.util.Vector;
 
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.render.java2d.Java2DRenderer;
 
 /**
@@ -40,6 +42,13 @@
  */
 public class PrintRenderer extends Java2DRenderer implements Pageable {
 
+    /**
+     * Printing parameter: the preconfigured PrinterJob to use,
+     * datatype: java.awt.print.PrinterJob
+     */
+    public static final String PRINTER_JOB = "printerjob";
+  
+  
     private static final int EVEN_AND_ALL = 0;
 
     private static final int EVEN = 1;
@@ -57,23 +66,42 @@
     private PrinterJob printerJob;
 
     /**
-     * Creates a new PrintRenderer with the options set from system properties.
+     * Creates a new PrintRenderer with the options set from system properties if a custom
+     * PrinterJob is not given in FOUserAgent's renderer options.
      */
     public PrintRenderer() {
-        initializePrinterJob();
+        setupFromSystemProperties();
     }
-
+    
     /**
      * Creates a new PrintRenderer and allows you to pass in a specific PrinterJob instance
      * that this renderer should work with.
      * @param printerJob the PrinterJob instance
+     * @deprecated Please use the rendering options on the user agent to pass in the PrinterJob!
      */
     public PrintRenderer(PrinterJob printerJob) {
+        this();
         this.printerJob = printerJob;
         printerJob.setPageable(this);
     }
     
-    private void initializePrinterJob() throws IllegalArgumentException {
+    private void initializePrinterJob() {
+        if (this.printerJob == null) {
+            printerJob = PrinterJob.getPrinterJob();
+            printerJob.setJobName("FOP Document");
+            printerJob.setCopies(copies);
+            if (System.getProperty("dialog") != null) {
+                if (!printerJob.printDialog()) {
+                    throw new RuntimeException(
+                            "Printing cancelled by operator");
+                }
+            }
+            printerJob.setPageable(this);
+        }
+    }
+
+    private void setupFromSystemProperties() {
+        //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;
@@ -82,19 +110,28 @@
         if (str != null) {
             mode = Boolean.valueOf(str).booleanValue() ? EVEN : ODD;
         }
-
-        printerJob = PrinterJob.getPrinterJob();
-        printerJob.setJobName("FOP Document");
-        printerJob.setCopies(copies);
-        if (System.getProperty("dialog") != null) {
-            if (!printerJob.printDialog()) {
+    }
+    
+    /** {@inheritDoc} */
+    public void setUserAgent(FOUserAgent agent) {
+        super.setUserAgent(agent);
+        
+        Map rendererOptions = agent.getRendererOptions();
+        
+        Object printerJobO = rendererOptions.get(PrintRenderer.PRINTER_JOB);
+        if (printerJobO != null) {
+            if (!(printerJobO instanceof PrinterJob)) {
                 throw new IllegalArgumentException(
-                        "Printing cancelled by operator");
+                    "Renderer option " + PrintRenderer.PRINTER_JOB
+                    + " must be an instance of java.awt.print.PrinterJob, but an instance of "
+                    + printerJobO.getClass().getName() + " was given.");
             }
+            printerJob = (PrinterJob)printerJobO;
+            printerJob.setPageable(this);
         }
-        printerJob.setPageable(this);
+        initializePrinterJob();
     }
-    
+
     /** @return the PrinterJob instance that this renderer prints to */
     public PrinterJob getPrinterJob() {
         return this.printerJob;
@@ -126,6 +163,7 @@
         this.startNumber = start;
     }
     
+    /** {@inheritDoc} */
     public void stopRenderer() throws IOException {
         super.stopRenderer();
 
@@ -149,7 +187,7 @@
         clearViewportList();
     }
 
-    public static int getIntProperty(String name, int def) {
+    private static int getIntProperty(String name, int def) {
         String propValue = System.getProperty(name);
         if (propValue != null) {
             try {
@@ -219,6 +257,7 @@
         }
     }
 
+    /** {@inheritDoc} */
     public Printable getPrintable(int pageIndex)
             throws IndexOutOfBoundsException {
         return this;

Modified: xmlgraphics/fop/trunk/status.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=649091&r1=649090&r2=649091&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Thu Apr 17 06:33:07 2008
@@ -58,6 +58,10 @@
         Added SVG support for AFP (GOCA).
         </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.
+      </action>
       <action context="Renderers" dev="JM" type="add" fixes-bug="44743" due-to="Yegor Kozlov">
         Added a public accessor for reference to the current page to PDFGraphics2D.
       </action>



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