[b/s]对于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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值