首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPages -使用POI4 XPages poiBean

XPages -使用POI4 XPages poiBean
EN

Stack Overflow用户
提问于 2014-04-15 19:16:40
回答 2查看 631关注 0票数 1

我正在尝试使用POI (来自POI4 XPages)来生成包含来自XPage的内容的Word文档。我已经按照POI示例数据库中的示例添加并配置了REST服务。

代码语言:javascript
复制
var template = poiBean.buildResourceTemplateSource(null,"YourFile.docx");
var lstBM = new java.util.ArrayList();
var jce:CategoryFields = new CategoryFields();
var doc = currentDocument.getDocument(true);
var retOutput1 = jce.getCategoryField1(doc);
var retOutput2 = jce.getCategoryField2(doc);
var doc:NotesDocument = currentDocument.getDocument();
var Field1 = retOutput1;
var Field2 = retOutput2;
lstBM.add(poiBean.buildDocumentBookmark("Field1", retOutput1));
lstBM.add(poiBean.buildDocumentBookmark("Field2", retOutput2));
var result = poiBean.processDocument2Stream(template, lstBM);
if (result == null) {
print("?????");
}
return new java.io.ByteArrayInputStream(result.toByteArray()) 

我现在想创建一个响应文档,它在富文本字段中包含上述代码的结果。我更喜欢在按钮的onClick事件中放置必要的代码(我想是SSJS)。但是,通过按钮我不知道如何处理REST服务的输出。有人知道我是怎么做到的吗?

我已经修改了下面建议的代码如下:

代码语言:javascript
复制
package AZGPackage;
import java.io.*;
import java.util.List;
import lotus.domino.*;
import biz.webgate.dominoext.poi.beans.PoiBean;
import biz.webgate.dominoext.poi.component.data.ITemplateSource;

public class MimeMaker {

private final PoiBean poiBean;
private final String templateName;
private String resultName;

public MimeMaker(PoiBean poiBean, String templateName, String resultName) {
    this.poiBean = poiBean;
    this.templateName = templateName;
}

public void renderToDocument(Session s, Document doc) throws NotesException {

    ITemplateSource template = poiBean.buildResourceTemplateSource(null,this.templateName);
    List lstBM = new java.util.ArrayList();
    CategoryFields jce = new CategoryFields();
    String retOutput1 = jce.getCategoryField1(doc);
    String retOutput2 = jce.getCategoryField2(doc);

    lstBM.add(poiBean.buildDocumentBookmark("Fachkompetenz", retOutput1));
    lstBM.add(poiBean.buildDocumentBookmark("Arbeitsverhalten", retOutput2));
    ByteArrayOutputStream result = poiBean.processDocument2Stream(template, lstBM);

    // Do the mime
    s.setConvertMime(false);
    MIMEEntity emailRoot = doc.createMIMEEntity("Body");
    MIMEEntity emailRootChild = emailRoot.createChildEntity();

    MIMEHeader emailHeader = emailRootChild.createHeader("Content-Disposition");
    emailHeader.setHeaderVal("attachment; filename=\"" + resultName + "\"");
    InputStream is = new ByteArrayInputStream(result.toByteArray());
    Stream stream = s.createStream();
    stream.setContents(is);
    emailRootChild.setContentFromBytes(stream, "x-vnd/ms-office-docx", MIMEEntity.ENC_IDENTITY_BINARY);

    s.setConvertMime(true);

   }
 }

但是,在调用之后:

代码语言:javascript
复制
var mimeMaker = new AZGPackage.MimeMaker(poiBean, "YourFile.docx", "someFile.docx");
mimeMaker.renderToDocument(session, currentDocument.getDocument(true));

我得到了错误:

脚本解释器错误,line=3,col=11:在java类'AZGPackage.MimeMaker‘上调用方法'renderToDocument(lotus.domino.local.Session,lotus.domino.local.Document)’时出错

EN

回答 2

Stack Overflow用户

发布于 2014-04-15 20:27:21

创建一个Java类,大致如下:

代码语言:javascript
复制
public class MimeMaker {

private final PoiBean poiBean;
private final String templateName;

public MimeMaker(PoiBean poiBean, String templateName, String resultName) {
    this.poiBean = poiBean;
    this.templateName = templateName;
}

public void renderToDocument(Session s, Document doc) {
    Template template = poiBean.buildResourceTemplateSource(null,this.templateName);
    Collection lstBM = new java.util.ArrayList();
    CategoryFields jce = new CategoryFields();
    String retOutput1 = jce.getCategoryField1(doc);
    String retOutput2 = jce.getCategoryField2(doc);

    lstBM.add(poiBean.buildDocumentBookmark("Field1", retOutput1));
    lstBM.add(poiBean.buildDocumentBookmark("Field2", retOutput2));
    ByteArrayOutputStream result = poiBean.processDocument2Stream(template, lstBM);

    // Do the mime
    s.setConvertMime(false);
    MIMEEntity emailRoot = emailDocument.createMIMEEntity("Body");
    MIMEEntity emailRootChild = emailRoot.createChildEntity();

    MIMEHeader emailHeader = emailRootChild.createHeader("Content-Disposition");
    emailHeader.setHeaderVal("attachment; filename=\"" + resultName + "\"");
    InputStream is = new ByteArrayInputStream(result.toByteArray());
    Stream stream = s.createStream();
    stream.setContents(is);
    emailRootChild.setContentFromBytes(stream, "x-vnd/ms-office-docx", MIMEEntity.ENC_IDENTITY_BINARY);

    s.setConvertMime(true);
   }
 }

您需要修复数据类型(我刚刚在记事本中键入),但您得到了要点。然后,您可以进入按钮并执行以下操作:

代码语言:javascript
复制
    var mimeMaker = new com.acme.MimeMaker(poiBean, "YourFile.docx", "someFile.docx");
    mimeMaker.renderToDocument(session, currentDocument.getDocument(true);

让我们知道进展如何

票数 2
EN

Stack Overflow用户

发布于 2014-07-11 15:43:09

我使用docx4j库解决了这个问题。我认为这是一个比Apache POI更好的选择。查看http://www.docx4java.org

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23082083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档