Author: jacopoc
Date: Thu Mar 22 23:49:50 2007 New Revision: 521601 URL: http://svn.apache.org/viewvc?view=rev&rev=521601 Log: This new version of the sendPrintFromScreen service is now working. A lot of improvements can be done (in the way a printer is selected, in the printer options etc) but this is a good start. Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/print/PrintServices.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/print/PrintServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/print/PrintServices.java?view=diff&rev=521601&r1=521600&r2=521601 ============================================================================== --- ofbiz/trunk/applications/content/src/org/ofbiz/content/print/PrintServices.java (original) +++ ofbiz/trunk/applications/content/src/org/ofbiz/content/print/PrintServices.java Thu Mar 22 23:49:50 2007 @@ -32,6 +32,7 @@ import org.ofbiz.service.LocalDispatcher; import org.ofbiz.service.ServiceUtil; import org.ofbiz.webapp.view.ApacheFopFactory; +import org.ofbiz.widget.fo.FoFormRenderer; import org.ofbiz.widget.html.HtmlScreenRenderer; import org.ofbiz.widget.screen.ScreenRenderer; import org.xml.sax.SAXException; @@ -60,10 +61,12 @@ import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.attribute.PrintRequestAttributeSet; -import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintServiceAttribute; import javax.print.attribute.PrintServiceAttributeSet; +import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.HashPrintServiceAttributeSet; import javax.print.attribute.standard.Copies; +import javax.print.attribute.standard.PrinterName; import javax.print.attribute.standard.PrinterURI; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; @@ -86,7 +89,7 @@ public final static String module = PrintServices.class.getName(); protected static final HtmlScreenRenderer htmlScreenRenderer = new HtmlScreenRenderer(); - + protected static final FoFormRenderer foFormRenderer = new FoFormRenderer(); public static Map sendPrintFromScreen(DispatchContext dctx, Map serviceContext) { LocalDispatcher dispatcher = dctx.getDispatcher(); @@ -101,7 +104,7 @@ } screenContext.put("locale", locale); if (UtilValidate.isEmpty(contentType)) { - contentType = "application/pdf"; + contentType = "application/postscript"; } try { @@ -109,13 +112,12 @@ MapStack screenContextTmp = MapStack.create(); screenContextTmp.put("locale", locale); - Writer writer = new StringWriter(); // substitute the freemarker variables... ScreenRenderer screensAtt = new ScreenRenderer(writer, screenContextTmp, htmlScreenRenderer); screensAtt.populateContextForService(dctx, screenContext); screenContextTmp.putAll(screenContext); - //screensAtt.getContext().put("formStringRenderer", new org.ofbiz.widget.fo.FoFormRenderer()); + screensAtt.getContext().put("formStringRenderer", foFormRenderer); screensAtt.render(screenLocation); // create the in/output stream for the generation @@ -148,14 +150,31 @@ URI printerUri = new URI(printerName); PrinterURI printerUriObj = new PrinterURI(printerUri); psaset.add(printerUriObj); - PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, psaset); + //PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, psaset); // TODO: selecting the printer by URI seems to not work + PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, null); + PrintService printer = null; if (services.length > 0) { + String sPrinterName = null; + for (int i = 0; i < services.length; i++) { + PrintServiceAttribute attr = services[i].getAttribute(PrinterName.class); + sPrinterName = ((PrinterName)attr).getValue(); + if (sPrinterName.toLowerCase().indexOf(printerName.toLowerCase()) >= 0) { + printer = services[i]; + Debug.logInfo("Printer with name [" + sPrinterName +"] selected", module); + break; + } + } + if (UtilValidate.isEmpty(printer)) { + printer = services[0]; + } + } + if (UtilValidate.isNotEmpty(printer)) { PrintRequestAttributeSet praset = new HashPrintRequestAttributeSet(); praset.add(new Copies(1)); - DocPrintJob job = services[0].createPrintJob(); + DocPrintJob job = printer.createPrintJob(); job.print(myDoc, praset); } else { - String errMsg = "No printer found"; + String errMsg = "No printer found with name: " + printerName; Debug.logError(errMsg, module); return ServiceUtil.returnError(errMsg); } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java?view=diff&rev=521601&r1=521600&r2=521601 ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java Thu Mar 22 23:49:50 2007 @@ -62,7 +62,7 @@ HttpServletRequest request; HttpServletResponse response; - protected FoFormRenderer() {} + public FoFormRenderer() {} public FoFormRenderer(HttpServletRequest request, HttpServletResponse response) { this.request = request; |
Free forum by Nabble | Edit this page |