我正在使用OpenNTF POI 4 XPages插件。这非常适合生成Word文档。现在,在生成Word文档之后,我想创建一个新的响应文档,并将word文档作为附件存储在此响应文档的富文本字段中。这是我的代码(在POI 4 XPages小部件的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
有关我如何实现这一目标的任何提示?
实施克努特赫尔曼提出的建议,我得到:
错误:Documentgeneration期间出错 POI LIB: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) at 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) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210) at 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:脚本解释器错误,行= 10,col = 14:调用方法错误'写入(java.io.FileOutputStream)'在java类' org.apache.poi.xwpf.usermodel.XWPFDocument' 在com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:334) at 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) at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435) at com.ibm.jscript.JSExpression.access $ 1(JSExpression.java:424) at com.ibm.jscript.JSExpression $ 2.run(JSExpression.java:414) 在java.security.AccessController.doPrivileged(AccessController.java:284) at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410) at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251) at 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) at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source) at 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) at org.apache.xmlbeans.XmlBeans.getContextTypeLoader(XmlBeans.java:336) at org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument $ Factory.parse(Unknown Source) 在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) at java.lang.Thread.getContextClassLoader(Thread.java:456) at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderImpl.getContextTypeLoader(SchemaTypeLoaderImpl.java:131) at sun.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在java.lang.reflect.Method.invoke(Method.java:611) 在org.apache.xmlbeans.XmlBeans.getContextTypeLoader(XmlBeans.java:327) ... 62更多
答案 0 :(得分:6)
将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 code snippet作为起点)。
答案 1 :(得分:2)
Notes API需要一个文件,而不是Java对象。我建议您使用MIME文档方法,将Base64 Doc作为mime部分