我正在使用 OpenNTF POI 4 XPage 插件。这对于生成 Word 文档非常有效。现在,生成 Word 文档后,我想创建一个新的响应文档,并将该 Word 文档作为附件存储在该响应文档的富文本字段中。这是我的代码(在 POI 4 XPage 小部件的 poi postGenerationProcess 属性中):
var doc:NotesDocument = currentDocument.getDocument();
var rdoc:NotesDocument = database.createDocument();
rdoc.appendItemValue("Form", "frmRespTempl");
rdoc.appendItemValue("Subject", "Embedded Word Document");
var rtitem:NotesRichTextItem = rdoc.createRichTextItem("Body");
rtitem.embedObject(xwpfdocument);
rdoc.makeResponse(doc);
rdoc.save();
不幸的是,这给了我错误:
com.ibm.jscript.InterpretException: Script interpreter error, line=13,
col=8: [TypeError] Method NotesRichTextItem.embedObject(org.apache.poi.xwpf.usermodel.XWPFDocument)
not found, or illegal parameters
有什么建议可以帮助我实现这一目标吗?
实施克努特·赫尔曼提出的以下建议,我得到:
POI 4 XPages -> 错误
错误:文档生成期间出错
POI 库:1.2.6.201312211419
堆栈跟踪:
com.ibm.xsp.exception.EvaluationExceptionEx:执行 JavaScript 操作表达式时出错
在 com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:126)
在 biz.webgate.dominoext.poi.component.containers.UIDocument$1.run(UIDocument.java:300)
在 biz.webgate.dominoext.poi.component.containers.UIDocument$1.run(UIDocument.java:1)
在 java.security.AccessController.doPrivileged(AccessController.java:251)
在 biz.webgate.dominoext.poi.component.containers.UIDocument.doPostGenerationProcessPrivileged(UIDocument.java:298)
在 biz.webgate.dominoext.poi.component.containers.UIDocument.postGenerationProcess(UIDocument.java:290)
在 biz.webgate.dominoext.poi.component.kernel.DocumentProcessor.processDocument(DocumentProcessor.java:233)
在 biz.webgate.dominoext.poi.component.kernel.DocumentProcessor.generateNewFile(DocumentProcessor.java:143)
在 biz.webgate.dominoext.poi.component.containers.UIDocument.processAjaxRequest(UIDocument.java:208)
在 biz.webgate.dominoext.poi.component.actions.DocumentGenerationServerAction.invoke(DocumentGenerationServerAction.java:48)
在 com.ibm.xsp.actions.ActionGroup.invoke(ActionGroup.java:135)
在 com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:60)
在 javax.faces.component.UICommand.broadcast(UICommand.java:324)
在 com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366)
在 com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
在 com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
在 com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
在 com.ibm.xsp.extlib.component.layout.UIVarPublisherBase.broadcast(UIVarPublisherBase.java:183)
在 com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
在 com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1535)
在javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307)
在javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428)
在 com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94)
在 com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
在 com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96)
在 com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:250)
在 com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:223)
在 com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:204)
在 com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
在 com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)
在 com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
在 com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)
在 com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1281)
在 com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847)
在 com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
在 com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
在 com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1265)
在 com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:653)
在 com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:476)
在 com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341)
在 com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297)
在 com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
引起原因:com.ibm.jscript.InterpretException:脚本解释器错误,line=10,col=14:在 java 类“org.apache.poi.xwpf.usermodel”上调用方法“write(java.io.FileOutputStream)”时出错。 XWPF文档'
在 com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:334)
在 com.ibm.jscript.types.FBSObject.call(FBSObject.java:161)
在 com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:175)
在 com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119)
在 com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139)
在 com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435)
在 com.ibm.jscript.JSExpression.access$1(JSExpression.java:424)
在 com.ibm.jscript.JSExpression$2.run(JSExpression.java:414)
在 java.security.AccessController.doPrivileged(AccessController.java:284)
在 com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410)
在 com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251)
在 com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234)
在 com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:221)
在 com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:111)
... 41 更多
引起原因:org.apache.poi.POIXMLException:java.lang.IllegalStateException:访问被拒绝(java.lang.RuntimePermission getClassLoader)
在org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:141)
在 org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:177)
在 sun.reflect.GenerateMethodAccessor163.invoke(来源未知)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
在 java.lang.reflect.Method.invoke(Method.java:611)
在 com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:321)
... 54 更多
引起原因:java.lang.IllegalStateException:访问被拒绝(java.lang.RuntimePermission getClassLoader)
在 org.apache.xmlbeans.XmlBeans.getContextTypeLoader(XmlBeans.java:336)
在 org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument$Factory.parse(来源未知)
在 org.apache.poi.POIXMLProperties。(POIXMLProperties.java:75)
在org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:139)
... 59 更多
原因:java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission getClassLoader)
在 java.security.AccessController.checkPermission(AccessController.java:108)
在 java.lang.SecurityManager.checkPermission(SecurityManager.java:544)
在 java.lang.Thread.getContextClassLoader(Thread.java:456)
在org.apache.xmlbeans.impl.schema.SchemaTypeLoaderImpl.getContextTypeLoader(SchemaTypeLoaderImpl.java:131)
在 sun.reflect.GenerateMethodAccessor128.invoke(来源未知)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
在 java.lang.reflect.Method.invoke(Method.java:611)
在 org.apache.xmlbeans.XmlBeans.getContextTypeLoader(XmlBeans.java:327)
... 62 更多
将您的 Word 文档保存到文件系统的临时文件夹中,然后从那里附加它rtitem.embedObject
到您的 RichTextItem:
var temp = java.lang.System.getProperty("java.io.tmpdir");
var file = new java.io.File(temp + "YourFile.docx");
var fileOutputStream = new java.io.FileOutputStream(file);
xwpfdocument.write(fileOutputStream);
fileOutputStream.close();
var doc:NotesDocument = currentDocument.getDocument();
var rdoc:NotesDocument = database.createDocument();
rdoc.appendItemValue("Form", "frmRespTempl");
rdoc.appendItemValue("Subject", "Embedded Word Document");
var rtitem:RichTextItem = rdoc.createRichTextItem("Body");
rtitem.embedObject(lotus.domino.local.EmbeddedObject.EMBED_ATTACHMENT, "",
file.getAbsolutePath(), null);
rdoc.makeResponse(doc);
rdoc.save();
如果您不想将文件保存到文件系统中,则创建一个 MIMEEntity 并将 Word 内容直接流式传输到 Notes 文档(Java代码片段 https://stackoverflow.com/a/14540635/2065611作为起点)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)