将Lotus Notes文档呈现为RTF,DXL和Java API时缺少字段

时间:2014-12-15 15:37:12

标签: java lotus-notes

我正在尝试将注释文档呈现给RTF,然后使用Java API呈现DXL。一旦我有了DXL,我就用XSL样式表将它转换为HTML。我的目标是生成一个HTML文档,该文档尽可能接近Notes客户端中的文档呈现。

但是,渲染的RTF和DXL中缺少计算字段。

以下是用于生成DXL的代码:

private String renderDocumentToDxl(lotus.domino.Document lotusDocument)
        throws Exception {
    Database db = getDatabase();
    lotus.domino.Document tmp = db.createDocument();

    RichTextItem rti = tmp.createRichTextItem("Body");
    lotusDocument.computeWithForm(true, false);
    lotusDocument.save();
    lotusDocument.renderToRTItem(rti);

    DxlExporter dxlExporter = getSession().createDxlExporter();
    dxlExporter.setOutputDOCTYPE(false);
    dxlExporter.setConvertNotesBitmapsToGIF(true);
    return dxlExporter.exportDxl(tmp);
}

通过调用computeWithForm添加到文档中的字段在生成的DXL中不存在。

有没有办法通过Java API将计算字段放入生成的DXL中?或者是否有更好的方法使用多米诺骨牌Java API生成Notes文档的HTML表示?

2 个答案:

答案 0 :(得分:0)

我对你的目标不太清楚。有两种可能性:

1)您希望lotusDocument中的项目存在于tmp中,并作为DXL中的实际标记数据导出。你的代码没有这样做。

2)您希望lotusDocument中非隐藏项的在tmp中的富文本Body项中作为文本存在,并且您希望这些值包含在DXL中,即从tmp导出 - 作为Body项的标记内的文本。这应该是您的代码正在做的事情。

如果您期望前者,那么那不是renderToRTItem所做的。它的作用是后者。即,它为您提供了lotusDocument中项目的的快照 - 但是当且仅当它们显示给打开文档的用户时。您没有自己获得这些项目,并且它们不会单独出现在DXL中。如果这是你所期望的,而且没有发生,那么就会出现其他问题,而且你还没有给出足够的信息来解决这个问题。

如果你想要前者,即lotusDocument中的实际项目作为从tmp导出的DXL中的单独标记元素存在,那么你应该使用

lotusDocument.copyAllItems(tmp,true);

的序列

Item tmpItem = lotusDocument.getFirstItem(itemName); tmp.copyItem(tmpItem,"");

答案 1 :(得分:0)

您可以使用URL

获取RichText字段的HTML表示形式
http://server/db.nsf/view/docunid/RichTextFieldname?OpenField

所以,保存您的tmp文档,获取docunid并通过URL中的http读取结果

http://server/db.nsf/0/tmpdocunid/Body?OpenField

您无需致电lotusDocument.computeWithForm,因为lotusDocument.renderToRTItem已经执行了表单的输入翻译和验证公式。
请注意,对于这两种方法,表单的LotusScript代码将不会被执行 - 以防万一您的字段以这种方式计算。

如果你可以使用XPages,这将是另一种选择:http://linqed.eu/2014/07/11/getting-html-from-any-richtext-item/