我正在尝试将注释文档呈现给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表示?
答案 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/