关于domino中的RTF域的一个小问题
问题描述:
一个文档需要显示另一个文档的RTF域保存的内容时,通过文档WebQueryOpen代理将要显示的文档的RTF域值取出后,赋值给当前文档域后,当段落内容比较长时显示出来的段落格式与原格式不一致。对比后发现赋值后的域值内容格式发生变化,即大约在70-80个字就会增加一个回车换行符,从而导致了显示出来的内容支离破碎,与原格式不符。
问题原因:
这是Domino设计中的一个bug,至今测试过R6.5.4及以下版本都存在这个问题,不知后续版本是否已处理了该问题。
解决方法:
1 总体思路
用于显示的文档在保存前,采用自定义符号替换用户输入的回车符,需要显示该文档时,取出该保存的值赋值给当前文档,显示之前替换所有回车换行符,然后还原自定义符号为回车符,然后显示出来即可保持原有的段落格式。
2 设计上的实现
(1)用于显示的文档增加名为tmpBody的RTF域来保存Body替换回车符为自定义符号后的内容。保存前做如下处理:
var re=/\r\n/g;
var body=document.all.Body.value;
document.all.tmpBody.value=body.replace(re,"c^g^s");?? //c^g^s为自定义符号,注意需要比较特殊
(2)WebQueryOpen代理赋值tmpBody域给当前文档的Body域
doc.Body= docFile.tmpBody?
(3)onLoad中对Body在进行显示前的处理
var bodyText=document.all.Body.value;
??//替换增加的换行
??var rex=/\r\n/g;
??bodyText=bodyText.replace(rex,"");
??//还原原有换行
??//var rex=new RegExp("c^g^s","g");
??//rex=/c^g^s/g;
??//bodyText=bodyText.replace(rex,"\r\n");
??do {
?? var find=bodyText.indexOf("c^g^s");
?? if(find!=-1)
????bodyText=bodyText.replace("c^g^s","\r\n");
??}while(find!=-1)
document.all.Body.value=bodyText;