问题描述:
一个文档需要显示另一个文档的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;