You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2006/11/08 00:13:20 UTC

svn commit: r472322 - in /incubator/ofbiz/trunk/framework: build.xml example/build.xml example/src/org/ example/src/org/ofbiz/ example/src/org/ofbiz/example/ example/src/org/ofbiz/example/ExamplePrintServices.java

Author: jonesde
Date: Tue Nov  7 15:13:19 2006
New Revision: 472322

URL: http://svn.apache.org/viewvc?view=rev&rev=472322
Log:
Added example print service that renders from a screen, sends it through FOP, and then send it to a printer configured on the server

Added:
    incubator/ofbiz/trunk/framework/example/src/org/
    incubator/ofbiz/trunk/framework/example/src/org/ofbiz/
    incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/
    incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java   (with props)
Modified:
    incubator/ofbiz/trunk/framework/build.xml
    incubator/ofbiz/trunk/framework/example/build.xml

Modified: incubator/ofbiz/trunk/framework/build.xml
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/build.xml?view=diff&rev=472322&r1=472321&r2=472322
==============================================================================
--- incubator/ofbiz/trunk/framework/build.xml (original)
+++ incubator/ofbiz/trunk/framework/build.xml Tue Nov  7 15:13:19 2006
@@ -26,7 +26,7 @@
                common/build.xml,workflow/build.xml,
                webapp/build.xml,guiapp/build.xml,widget/build.xml,
                testtools/build.xml,
-               appserver/build.xml,webtools/build.xml"/>
+               appserver/build.xml,webtools/build.xml,example/build.xml"/>
       <!-- For Shark add "shark/build.xml" to the list above, in the framework-builds list (after workflow, before webapp works fine)  -->
 
     <filelist id="test-builds" dir="." files="base/build.xml,entity/build.xml"/>

Modified: incubator/ofbiz/trunk/framework/example/build.xml
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/example/build.xml?view=diff&rev=472322&r1=472321&r2=472322
==============================================================================
--- incubator/ofbiz/trunk/framework/example/build.xml (original)
+++ incubator/ofbiz/trunk/framework/example/build.xml Tue Nov  7 15:13:19 2006
@@ -42,6 +42,8 @@
             <fileset dir="../../framework/service/lib" includes="*.jar"/>
             <fileset dir="../../framework/service/build/lib" includes="*.jar"/>
             <fileset dir="../../framework/minilang/build/lib" includes="*.jar"/>
+            <fileset dir="../../framework/widget/build/lib" includes="*.jar"/>
+            <fileset dir="../../framework/webapp/lib" includes="*.jar"/>
         </path>
     </target>
 

Added: incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java?view=auto&rev=472322
==============================================================================
--- incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java (added)
+++ incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java Tue Nov  7 15:13:19 2006
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2001-2006 The Apache Software Foundation
+ * 
+ * Licensed 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.
+ */
+package org.ofbiz.example;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Map;
+
+import javax.print.Doc;
+import javax.print.DocFlavor;
+import javax.print.DocPrintJob;
+import javax.print.PrintException;
+import javax.print.PrintService;
+import javax.print.PrintServiceLookup;
+import javax.print.SimpleDoc;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.Sides;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.avalon.framework.logger.Log4JLogger;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.fop.apps.Driver;
+import org.apache.fop.image.FopImageFactory;
+import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.tools.DocumentInputSource;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.GeneralException;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.ServiceUtil;
+import org.ofbiz.widget.html.HtmlScreenRenderer;
+import org.ofbiz.widget.screen.ScreenRenderer;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+public class ExamplePrintServices {
+    public static final String module = ExamplePrintServices.class.getName();
+
+    private static HtmlScreenRenderer htmlScreenRenderer = new HtmlScreenRenderer();
+
+    public static Map printReportPdf(DispatchContext dctx, Map context) {
+        String screenLocation = "component://example/widget/example/ExampleReportScreens.xml";
+        String reportScreenName = "ExampleReport";
+        
+        // render a screen to get the XML document
+        Writer reportWriter = new StringWriter();
+        ScreenRenderer reportScreenRenderer = new ScreenRenderer(reportWriter, null, htmlScreenRenderer);
+        reportScreenRenderer.populateContextForService(dctx, context);
+
+        // put the exampleId in the screen context, is a parameter coming into the service
+        //reportScreenRenderer.getContext().put("exampleId", context.get("exampleId"));
+        
+        try {
+            reportScreenRenderer.render(screenLocation, reportScreenName);
+        } catch (GeneralException e) {
+            String errMsg = "General error rendering screen [" + screenLocation + "]: " + e.toString();
+            Debug.logError(e, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        } catch (IOException e) {
+            String errMsg = "IO error rendering screen [" + screenLocation + "]: " + e.toString();
+            Debug.logError(e, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        } catch (SAXException e) {
+            String errMsg = "SAX (XML parse) error rendering screen [" + screenLocation + "]: " + e.toString();
+            Debug.logError(e, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        } catch (ParserConfigurationException e) {
+            String errMsg = "Parser configuration error rendering screen [" + screenLocation + "]: " + e.toString();
+            Debug.logError(e, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        }
+
+        String reportXmlDocument = reportWriter.toString();
+
+        // configure logging for the FOP
+        Logger logger = new Log4JLogger(Debug.getLogger(module));
+        MessageHandler.setScreenLogger(logger);        
+                          
+        // load the FOP driver
+        Driver driver = new Driver();
+        driver.setRenderer(Driver.RENDER_PDF);
+        driver.setLogger(logger);
+                                        
+        // read the XSL-FO XML Document
+        Document xslfo = null;
+        try {
+            xslfo = UtilXml.readXmlDocument(reportXmlDocument);
+        } catch (Throwable t) {
+            String errMsg = "Problems reading the parsed content to XML Document: " + t.toString();
+            Debug.logError(t, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        }
+        
+        // create the output stream for the PDF
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        driver.setOutputStream(out);     
+                
+        // set the input source (XSL-FO) and generate the PDF        
+        InputSource is = new DocumentInputSource(xslfo);               
+        driver.setInputSource(is);        
+        try {
+            driver.run();
+            FopImageFactory.resetCache();
+        } catch (Throwable t) {
+            String errMsg = "Unable to generate PDF from XSL-FO: " + t.toString();
+            Debug.logError(t, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        }
+        
+        /*
+        // set the content type and length                    
+        response.setContentType("application/pdf");        
+        response.setContentLength(out.size());
+        
+        // write to the browser
+        try {
+            out.writeTo(response.getOutputStream());
+            response.getOutputStream().flush();
+        } catch (IOException e) {
+            throw new ViewHandlerException("Unable write to browser OutputStream", e);            
+        }
+        */                             
+        
+        DocFlavor docFlavor = DocFlavor.BYTE_ARRAY.PDF;
+        Doc myDoc = new SimpleDoc(out.toByteArray(), docFlavor, null);
+        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
+        aset.add(new Copies(1));
+        //aset.add(MediaSize.A4);
+        aset.add(Sides.ONE_SIDED);
+        
+        PrintService[] services = PrintServiceLookup.lookupPrintServices(docFlavor, aset);
+        if (services.length > 0) { 
+        	DocPrintJob job = services[0].createPrintJob(); 
+            try {
+            	job.print(myDoc, aset); 
+            } catch (PrintException pe) {
+                String errMsg = "Unable to print PDF from XSL-FO: " + pe.toString();
+                Debug.logError(pe, errMsg, module);
+                return ServiceUtil.returnError(errMsg);
+            } 
+        } 
+
+        return ServiceUtil.returnSuccess();
+    }
+}

Propchange: incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: incubator/ofbiz/trunk/framework/example/src/org/ofbiz/example/ExamplePrintServices.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain