Jacopo, Thank you. I'll test the barcode.
在 2015-7-15,下午10:18,Jacopo Cappellato <[email protected]> 写道: > +1 to migrate to FOP 2.0 > But if you do, please test that barcodes are properly rendered. Barcodes are > generated using > framework/base/lib/barcode4j-2.1-barcode4j-fop-ext-complete.jar > and we have to make sure this version works with the new FOP 2.0. > > Regards, > > Jacopo > > > On Jul 15, 2015, at 7:20 AM, Shi Jinghai <[email protected]> wrote: > >> Hi, >> >> I'm working on OFBIZ-6504. As Scott pointed out, my current implement is not >> good enough, so I tried the FOP 1.1 native encryption without lucky, FOP 2.0 >> encryption works well in my environment. >> >> Could I upgrade FOP to 2.0 in OFBiz trunk? If yes, what test cases should I >> be more careful? >> >> The source file affected: >> framework/webapp/src/org/ofbiz/webapp/view/ApacheFopWorker.java >> >> The following jars will be changed: >> in application/content/lib: >> fontbox: from 1.7.1 to 1.8.5 >> >> in framework/base/lib: >> batik-all: from 1.7 to 1.8 >> fop: from 1.1 to 2.0 >> xmlgraphics-commons: from 1.5 to 2.0.1 >> >> New jar: >> avalon-ffamcework: 4.2.0 >> >> The pdfbox and jempbox in application/content/lib will be upgrade to 1.8.5 >> with the font box. >> >> The native encryption: >> FOP 1.1: http://xmlgraphics.apache.org/fop/1.1/pdfencryption.html >> FOP 2.0: http://xmlgraphics.apache.org/fop/2.0/pdfencryption.html >> >> Kind Regards, >> >> Shi Jinghai/Langhua >> >> >> 在 2015-7-13,下午4:19,Scott Gray <[email protected]> 写道: >> >>> Is it our plan to fill the example component with things like this? It >>> seems like such an obscure requirement. >>> >>> Once upon a time the example application was intended to provide examples >>> of core framework usage. I don't think we're demonstrating the power of >>> the framework here when the example requires quite a large amount of code >>> to add a password. >>> >>> Also, it looks like you're creating the PDF with FOP (via screens) then >>> deconstructing it with PDFBox and regenerating it with a password? Also, >>> what is ofbiz/trunk/specialpurpose/example/lib/bcprov-jdk15-1.44.jar? I >>> think we have some admin stuff to do when adding new libs. >>> >>> Lastly, if we were to be "selling" this as a framework feature, I would >>> expect the renderer to simply take some special input parameters in the >>> context that indicate the need for password protection and the passwords to >>> use and then have the renderer do it itself. >>> >>> >>> Regards >>> Scott >>> >>> On 13 July 2015 at 07:46, <[email protected]> wrote: >>> >>>> Author: shijh >>>> Date: Sun Jul 12 19:46:54 2015 >>>> New Revision: 1690515 >>>> >>>> URL: http://svn.apache.org/r1690515 >>>> Log: >>>> OFBIZ-6504. >>>> >>>> Add an example to protect a pdf generated by FOP with owner password and >>>> user password. >>>> >>>> Added: >>>> ofbiz/trunk/specialpurpose/example/config/examplepdf.properties >>>> (with props) >>>> ofbiz/trunk/specialpurpose/example/lib/bcprov-jdk15-1.44.jar (with >>>> props) >>>> >>>> ofbiz/trunk/specialpurpose/example/src/org/ofbiz/example/ExampleEvents.java >>>> (with props) >>>> Modified: >>>> ofbiz/trunk/specialpurpose/example/build.xml >>>> ofbiz/trunk/specialpurpose/example/config/ExampleUiLabels.xml >>>> ofbiz/trunk/specialpurpose/example/ofbiz-component.xml >>>> >>>> ofbiz/trunk/specialpurpose/example/webapp/example/WEB-INF/controller.xml >>>> ofbiz/trunk/specialpurpose/example/widget/example/CommonScreens.xml >>>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleForms.xml >>>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>>> >>>> Modified: ofbiz/trunk/specialpurpose/example/build.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/build.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/build.xml (original) >>>> +++ ofbiz/trunk/specialpurpose/example/build.xml Sun Jul 12 19:46:54 2015 >>>> @@ -51,5 +51,6 @@ under the License. >>>> <fileset dir="../../framework/webapp/lib" includes="*.jar"/> >>>> <fileset dir="../../framework/webapp/build/lib" includes="*.jar"/> >>>> <fileset dir="../../framework/common/build/lib" includes="*.jar"/> >>>> + <fileset dir="../../applications/content/lib" includes="*.jar"/> >>>> </path> >>>> </project> >>>> >>>> Modified: ofbiz/trunk/specialpurpose/example/config/ExampleUiLabels.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/config/ExampleUiLabels.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/config/ExampleUiLabels.xml >>>> (original) >>>> +++ ofbiz/trunk/specialpurpose/example/config/ExampleUiLabels.xml Sun Jul >>>> 12 19:46:54 2015 >>>> @@ -1108,4 +1108,20 @@ >>>> <value xml:lang="zh">ä½ ä¿®æ”¹äº†é€‰æ‹©æ¡†ä¸çš„值</value> >>>> <value xml:lang="zh-TW">ä½ ä¿®æ”¹äº†é ¸æ“‡æ¡†ä¸çš„值</value> >>>> </property> >>>> + <property key="ExamplePdfPassword"> >>>> + <value xml:lang="en">PDF With Password</value> >>>> + <value xml:lang="zh">有密ç çš„PDF</value> >>>> + </property> >>>> + <property key="PageTitleSetExamplePdfPassword"> >>>> + <value xml:lang="en">Set PDF Protected By Password</value> >>>> + <value xml:lang="zh">设置有密ç ä¿ æŠ¤çš„PDF</value> >>>> + </property> >>>> + <property key="ExampleGeneratePDF"> >>>> + <value xml:lang="en">Generate PDF</value> >>>> + <value xml:lang="zh">ç”Ÿæˆ PDF</value> >>>> + </property> >>>> + <property key="password_did_not_match_confirm_password"> >>>> + <value xml:lang="en">Password did not match confirm >>>> password.</value> >>>> + <value xml:lang="zh">密ç ä¸ŽéªŒè¯ å¯†ç ä¸ ä¸€è‡´ã€‚</value> >>>> + </property> >>>> </resource> >>>> >>>> Added: ofbiz/trunk/specialpurpose/example/config/examplepdf.properties >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/config/examplepdf.properties?rev=1690515&view=auto >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/config/examplepdf.properties (added) >>>> +++ ofbiz/trunk/specialpurpose/example/config/examplepdf.properties Sun >>>> Jul 12 19:46:54 2015 >>>> @@ -0,0 +1,24 @@ >>>> >>>> +############################################################################### >>>> +# 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. >>>> >>>> +############################################################################### >>>> + >>>> +# If Y, the default.pdf.owner.password will be used as owner password, >>>> the user input password will be used as user password; >>>> +# if N, the user input password will be used as owner password and user >>>> password. >>>> +use.default.pdf.owner.password=N >>>> + >>>> +default.pdf.owner.password=ofbiz >>>> >>>> Propchange: ofbiz/trunk/specialpurpose/example/config/examplepdf.properties >>>> >>>> ------------------------------------------------------------------------------ >>>> svn:mime-type = text/plain >>>> >>>> Added: ofbiz/trunk/specialpurpose/example/lib/bcprov-jdk15-1.44.jar >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/lib/bcprov-jdk15-1.44.jar?rev=1690515&view=auto >>>> >>>> ============================================================================== >>>> Binary file - no diff available. >>>> >>>> Propchange: ofbiz/trunk/specialpurpose/example/lib/bcprov-jdk15-1.44.jar >>>> >>>> ------------------------------------------------------------------------------ >>>> svn:mime-type = application/octet-stream >>>> >>>> Modified: ofbiz/trunk/specialpurpose/example/ofbiz-component.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/ofbiz-component.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/ofbiz-component.xml (original) >>>> +++ ofbiz/trunk/specialpurpose/example/ofbiz-component.xml Sun Jul 12 >>>> 19:46:54 2015 >>>> @@ -30,6 +30,7 @@ under the License. >>>> >>>> <!-- load single or multiple external libraries --> >>>> <classpath type="jar" location="build/lib/*"/> >>>> + <classpath type="jar" location="lib/*"/> >>>> >>>> <!-- entity resources: model(s), eca(s), group, and data definitions >>>> --> >>>> <entity-resource type="model" reader-name="main" loader="main" >>>> location="entitydef/entitymodel.xml"/> >>>> >>>> Added: >>>> ofbiz/trunk/specialpurpose/example/src/org/ofbiz/example/ExampleEvents.java >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/src/org/ofbiz/example/ExampleEvents.java?rev=1690515&view=auto >>>> >>>> ============================================================================== >>>> --- >>>> ofbiz/trunk/specialpurpose/example/src/org/ofbiz/example/ExampleEvents.java >>>> (added) >>>> +++ >>>> ofbiz/trunk/specialpurpose/example/src/org/ofbiz/example/ExampleEvents.java >>>> Sun Jul 12 19:46:54 2015 >>>> @@ -0,0 +1,220 @@ >>>> >>>> +/******************************************************************************* >>>> + * 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. >>>> + >>>> *******************************************************************************/ >>>> +package org.ofbiz.example; >>>> + >>>> +import java.io.ByteArrayInputStream; >>>> +import java.io.ByteArrayOutputStream; >>>> +import java.io.IOException; >>>> +import java.io.StringReader; >>>> +import java.io.StringWriter; >>>> +import java.io.Writer; >>>> +import java.util.Locale; >>>> +import java.util.Map; >>>> + >>>> +import javax.servlet.ServletContext; >>>> +import javax.servlet.http.HttpServletRequest; >>>> +import javax.servlet.http.HttpServletResponse; >>>> +import javax.xml.parsers.ParserConfigurationException; >>>> +import javax.xml.transform.stream.StreamSource; >>>> + >>>> +import org.apache.fop.apps.FOPException; >>>> +import org.apache.fop.apps.Fop; >>>> +import org.apache.fop.apps.MimeConstants; >>>> +import org.apache.pdfbox.exceptions.COSVisitorException; >>>> +import org.apache.pdfbox.pdmodel.PDDocument; >>>> +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; >>>> +import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException; >>>> +import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy; >>>> +import org.ofbiz.base.util.Debug; >>>> +import org.ofbiz.base.util.GeneralException; >>>> +import org.ofbiz.base.util.UtilCodec; >>>> +import org.ofbiz.base.util.UtilHttp; >>>> +import org.ofbiz.base.util.UtilProperties; >>>> +import org.ofbiz.base.util.UtilValidate; >>>> +import org.ofbiz.entity.Delegator; >>>> +import org.ofbiz.entity.util.EntityUtilProperties; >>>> +import org.ofbiz.webapp.view.ApacheFopWorker; >>>> +import org.ofbiz.widget.renderer.FormStringRenderer; >>>> +import org.ofbiz.widget.renderer.ScreenRenderer; >>>> +import org.ofbiz.widget.renderer.ScreenStringRenderer; >>>> +import org.ofbiz.widget.renderer.macro.MacroFormRenderer; >>>> +import org.ofbiz.widget.renderer.macro.MacroScreenRenderer; >>>> +import org.xml.sax.SAXException; >>>> + >>>> +import freemarker.template.TemplateException; >>>> + >>>> + >>>> +public class ExampleEvents { >>>> + >>>> + public static final String module = ExampleEvents.class.getName(); >>>> + >>>> + public static final String examplePdfProperties = >>>> "examplepdf.properties"; >>>> + >>>> + public static final boolean useExampleDefaultOwnerPassword = >>>> UtilProperties.getPropertyValue(examplePdfProperties, >>>> "use.default.pdf.owner.password", "N").equalsIgnoreCase("Y"); >>>> + >>>> + public static final String exampleDefaultOwnerPassword = >>>> UtilProperties.getPropertyValue(examplePdfProperties, >>>> "default.pdf.owner.password", "ofbiz"); >>>> + >>>> + public static final String resourceExample = "ExampleUiLables"; >>>> + >>>> + /** Set password to the specified example and output the generated >>>> PDF. >>>> + *@param request The HTTPRequest object for the current request >>>> + *@param response The HTTPResponse object for the current request >>>> + *@return String specifying the exit status of this event >>>> + */ >>>> + public static String setExamplePdfPassword(HttpServletRequest >>>> request, HttpServletResponse response) { >>>> + Delegator delegator = (Delegator) >>>> request.getAttribute("delegator"); >>>> + Locale locale = UtilHttp.getLocale(request); >>>> + ServletContext servletContext = >>>> request.getSession().getServletContext(); >>>> + >>>> + Map<String, Object> requestParams = >>>> UtilHttp.getParameterMap(request); >>>> + String password = (String) requestParams.get("PASSWORD"); >>>> + String confirmPassword = (String) >>>> requestParams.get("CONFIRM_PASSWORD"); >>>> + >>>> + if (UtilValidate.isEmpty(password) && >>>> UtilValidate.isEmpty(confirmPassword) && >>>> (UtilValidate.isEmpty(exampleDefaultOwnerPassword) || >>>> !useExampleDefaultOwnerPassword)) { >>>> + return "nopassword"; >>>> + } >>>> + if (UtilValidate.isNotEmpty(password) && >>>> !password.equals(confirmPassword)) { >>>> + String errMsg = UtilProperties.getMessage(resourceExample, >>>> "password_not_equal_confirm_password", locale); >>>> + request.setAttribute("_ERROR_MESSAGE_", errMsg); >>>> + return "error"; >>>> + } >>>> + >>>> + // get the original pdf >>>> + String screenLocation = >>>> "component://example/widget/example/ExampleScreens.xml"; >>>> + String reportScreenName = "ExampleReport"; >>>> + >>>> + // render a screen to get the XML document >>>> + Writer reportWriter = new StringWriter(); >>>> + >>>> + try { >>>> + ScreenStringRenderer foScreenRenderer = new >>>> MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", " >>>> screenfop.name", delegator), >>>> EntityUtilProperties.getPropertyValue("widget", "screenfop.screenrenderer", >>>> delegator)); >>>> + FormStringRenderer formStringRenderer = new >>>> MacroFormRenderer(EntityUtilProperties.getPropertyValue("widget", >>>> "screenfop.formrenderer", delegator), request, response); >>>> + ScreenRenderer screens = new ScreenRenderer(reportWriter, >>>> null, foScreenRenderer); >>>> + screens.populateContextForRequest(request, response, >>>> servletContext); >>>> + >>>> + // this is the object used to render forms from their >>>> definitions >>>> + screens.getContext().put("formStringRenderer", >>>> formStringRenderer); >>>> + screens.getContext().put("simpleEncoder", >>>> UtilCodec.getEncoder(EntityUtilProperties.getPropertyValue("widget", >>>> "screenfop.encoder", delegator))); >>>> + >>>> + screens.render(screenLocation, reportScreenName); >>>> + } catch (GeneralException e) { >>>> + String errMsg = "General error rendering screen [" + >>>> screenLocation + "]: " + e.toString(); >>>> + Debug.logError(e, errMsg, module); >>>> + request.setAttribute("_ERROR_MESSAGE_", errMsg); >>>> + return "error"; >>>> + } catch (IOException e) { >>>> + String errMsg = "IO error rendering screen [" + >>>> screenLocation + "]: " + e.toString(); >>>> + Debug.logError(e, errMsg, module); >>>> + request.setAttribute("_ERROR_MESSAGE_", errMsg); >>>> + return "error"; >>>> + } catch (SAXException e) { >>>> + String errMsg = "SAX (XML parse) error rendering screen [" + >>>> screenLocation + "]: " + e.toString(); >>>> + Debug.logError(e, errMsg, module); >>>> + request.setAttribute("_ERROR_MESSAGE_", errMsg); >>>> + return "error"; >>>> + } catch (ParserConfigurationException e) { >>>> + String errMsg = "Parser configuration error rendering screen >>>> [" + screenLocation + "]: " + e.toString(); >>>> + Debug.logError(e, errMsg, module); >>>> + request.setAttribute("_ERROR_MESSAGE_", errMsg); >>>> + return "error"; >>>> + } catch (TemplateException e) { >>>> + String errMsg = "Freemarker template error rendering screen >>>> [" + screenLocation + "]: " + e.toString(); >>>> + Debug.logError(e, errMsg, module); >>>> + request.setAttribute("_ERROR_MESSAGE_", errMsg); >>>> + return "error"; >>>> + } >>>> + >>>> + // set the input source (XSL-FO) and generate the PDF >>>> + StreamSource src = new StreamSource(new >>>> StringReader(reportWriter.toString())); >>>> + >>>> + // create the output stream for the generation >>>> + ByteArrayOutputStream out = new ByteArrayOutputStream(); >>>> + >>>> + try { >>>> + Fop fop = ApacheFopWorker.createFopInstance(out, >>>> MimeConstants.MIME_PDF); >>>> + ApacheFopWorker.transform(src, null, fop); >>>> + out.flush(); >>>> + out.close(); >>>> + } catch (FOPException e) { >>>> + request.setAttribute("_ERROR_MESSAGE_", e.getMessage()); >>>> + Debug.logError(e, module); >>>> + return "error"; >>>> + } catch (IOException e) { >>>> + request.setAttribute("_ERROR_MESSAGE_", e.getMessage()); >>>> + Debug.logError(e, module); >>>> + return "error"; >>>> + } >>>> + >>>> + // parse the pdf with PDFBox >>>> + ByteArrayInputStream is = new >>>> ByteArrayInputStream(out.toByteArray()); >>>> + PDDocument document; >>>> + try { >>>> + document = PDDocument.load(is); >>>> + int keyLength = 40; >>>> + AccessPermission ap = new AccessPermission(); >>>> + String ownerPassword = exampleDefaultOwnerPassword; >>>> + if (UtilValidate.isEmpty(ownerPassword) || >>>> !useExampleDefaultOwnerPassword) { >>>> + ownerPassword = password; >>>> + } >>>> + StandardProtectionPolicy spp = new >>>> StandardProtectionPolicy(ownerPassword, password, ap); >>>> + spp.setEncryptionKeyLength(keyLength); >>>> + document.protect(spp); >>>> + } catch (IOException e) { >>>> + request.setAttribute("_ERROR_MESSAGE_", e.getMessage()); >>>> + Debug.logError(e, module); >>>> + return "error"; >>>> + } catch (BadSecurityHandlerException e) { >>>> + request.setAttribute("_ERROR_MESSAGE_", e.getMessage()); >>>> + Debug.logError(e, module); >>>> + return "error"; >>>> + } finally { >>>> + try { >>>> + if (is != null) { >>>> + is.close(); >>>> + } >>>> + } catch (IOException e) { >>>> + // ignore >>>> + } >>>> + } >>>> + >>>> + out = new ByteArrayOutputStream(); >>>> + try { >>>> + document.save(out); >>>> + // set the content type and length >>>> + response.setContentType(MimeConstants.MIME_PDF); >>>> + response.setContentLength(out.size()); >>>> + out.flush(); >>>> + out.close(); >>>> + // write to the browser >>>> + response.getOutputStream().write(out.toByteArray()); >>>> + response.getOutputStream().flush(); >>>> + } catch (COSVisitorException e) { >>>> + request.setAttribute("_ERROR_MESSAGE_", e.getMessage()); >>>> + Debug.logError(e, module); >>>> + return "error"; >>>> + } catch (IOException e) { >>>> + request.setAttribute("_ERROR_MESSAGE_", e.getMessage()); >>>> + Debug.logError(e, module); >>>> + return "error"; >>>> + } >>>> + >>>> + return "success"; >>>> + } >>>> + >>>> +} >>>> >>>> Propchange: >>>> ofbiz/trunk/specialpurpose/example/src/org/ofbiz/example/ExampleEvents.java >>>> >>>> ------------------------------------------------------------------------------ >>>> svn:mime-type = text/plain >>>> >>>> Modified: >>>> ofbiz/trunk/specialpurpose/example/webapp/example/WEB-INF/controller.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/webapp/example/WEB-INF/controller.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- >>>> ofbiz/trunk/specialpurpose/example/webapp/example/WEB-INF/controller.xml >>>> (original) >>>> +++ >>>> ofbiz/trunk/specialpurpose/example/webapp/example/WEB-INF/controller.xml >>>> Sun Jul 12 19:46:54 2015 >>>> @@ -225,6 +225,19 @@ under the License. >>>> <response name="success" type="view" value="ExamplePieChart"/> >>>> </request-map> >>>> >>>> + <!-- Pdf Report Options --> >>>> + <request-map uri="ExampleReportPdfOptions"> >>>> + <security https="true" auth="true"/> >>>> + <response name="success" type="view" >>>> value="ExampleReportPdfOptions"/> >>>> + </request-map> >>>> + <request-map uri="setExamplePdfPassword"> >>>> + <security https="true" auth="true"/> >>>> + <event type="java" path="org.ofbiz.example.ExampleEvents" >>>> invoke="setExamplePdfPassword"/> >>>> + <response name="success" type="none"/> >>>> + <response name="nopassword" type="view" value="ExampleReportPdf"/> >>>> + <response name="error" type="view" >>>> value="ExampleReportPdfOptions"/> >>>> + </request-map> >>>> + >>>> <!-- end of request mappings --> >>>> >>>> <!-- View Mappings --> >>>> @@ -283,5 +296,6 @@ under the License. >>>> application/vnd.oasis.opendocument.presentation >>>> --> >>>> >>>> + <view-map name="ExampleReportPdfOptions" type="screen" >>>> page="component://example/widget/example/ExampleScreens.xml#ExampleReportPdfOptions"/> >>>> <!-- end of view mappings --> >>>> </site-conf> >>>> >>>> Modified: >>>> ofbiz/trunk/specialpurpose/example/widget/example/CommonScreens.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/widget/example/CommonScreens.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/widget/example/CommonScreens.xml >>>> (original) >>>> +++ ofbiz/trunk/specialpurpose/example/widget/example/CommonScreens.xml >>>> Sun Jul 12 19:46:54 2015 >>>> @@ -103,6 +103,10 @@ under the License. >>>> <parameter >>>> param-name="exampleId"/> >>>> <image url-mode="raw" >>>> src="${iconsLocation}/page_white_acrobat.png"/> >>>> </link> >>>> + <link >>>> target="ExampleReportPdfOptions" text="${uiLabelMap.ExamplePdfPassword}" >>>> style="buttontext"> >>>> + <parameter >>>> param-name="exampleId"/> >>>> + <image url-mode="raw" >>>> src="${iconsLocation}/page_white_acrobat.png"/> >>>> + </link> >>>> <link target="help" >>>> text="${uiLabelMap.CommonHelp}" style="buttontext" target-window="_blank"> >>>> <parameter >>>> param-name="topic" value="ExampleEditHelp"/> >>>> <image url-mode="raw" >>>> src="${iconsLocation}/help.png"/> >>>> >>>> Modified: >>>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleForms.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/widget/example/ExampleForms.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/widget/example/ExampleForms.xml >>>> (original) >>>> +++ ofbiz/trunk/specialpurpose/example/widget/example/ExampleForms.xml Sun >>>> Jul 12 19:46:54 2015 >>>> @@ -311,4 +311,11 @@ under the License. >>>> </field> >>>> <field name="submitButton" >>>> title="${uiLabelMap.CommonAdd}"><submit button-type="button"/></field> >>>> </form> >>>> + >>>> + <form name="SetExamplePdfPassword" type="single" >>>> target="setExamplePdfPassword" title=""> >>>> + <field name="exampleId"><hidden/></field> >>>> + <field name="PASSWORD" >>>> title="${uiLabelMap.CommonPassword}"><password size="15" >>>> maxlength="250"/></field> >>>> + <field name="CONFIRM_PASSWORD" >>>> title="${uiLabelMap.CommonPassword}" tooltip="* >>>> ${uiLabelMap.CommonConfirm}"><password size="15" maxlength="250"/></field> >>>> + <field name="submitButton" >>>> title="${uiLabelMap.ExampleGeneratePDF}"><submit >>>> button-type="button"/></field> >>>> + </form> >>>> </forms> >>>> >>>> Modified: >>>> ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>>> URL: >>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml?rev=1690515&r1=1690514&r2=1690515&view=diff >>>> >>>> ============================================================================== >>>> --- ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>>> (original) >>>> +++ ofbiz/trunk/specialpurpose/example/widget/example/ExampleScreens.xml >>>> Sun Jul 12 19:46:54 2015 >>>> @@ -494,4 +494,21 @@ under the License. >>>> </widgets> >>>> </section> >>>> </screen> >>>> + >>>> + <screen name="ExampleReportPdfOptions"> >>>> + <section> >>>> + <actions> >>>> + <set field="titleProperty" >>>> value="PageTitleSetExamplePdfPassword"/> >>>> + <set field="tabButtonItem" value="EditExample"/> >>>> + <set field="exampleId" from-field="parameters.exampleId"/> >>>> + </actions> >>>> + <widgets> >>>> + <decorator-screen name="CommonExampleDecorator" >>>> location="${parameters.mainDecoratorLocation}"> >>>> + <decorator-section name="body"> >>>> + <include-form name="SetExamplePdfPassword" >>>> location="component://example/widget/example/ExampleForms.xml"/> >>>> + </decorator-section> >>>> + </decorator-screen> >>>> + </widgets> >>>> + </section> >>>> + </screen> >>>> </screens> >>>> >>>> >>>> >> >
