richtextbox控件中操作行间距段间距都可以用发送消息解决,但是字间距却鲜有人关注,无法通过PARAFORMAT2消息解决,只能直接操作rtf格式

字间距主要就是要控制 expand expandtw 这些rtf属性

下面给出一个插入代码,只能对简单点的rtf进行操作,word保存出来的rtf不一定可以

操作rtf格式的类库使用RtfTree

        public void SetCharacterSpacing(int spacing)
{
spacing--;
if (spacing < 0)
{
return;
} RtfTree doc = new RtfTree();
doc.LoadRtfText(this.Rtf);
RtfNodeCollection fileds = doc.MainGroup.ChildNodes;
bool hasltrch = false;
bool hasrtlch = false;
bool hasText = !string.IsNullOrEmpty(this.Text);
foreach (RtfTreeNode f in fileds)
{
if (f.NodeType == RtfNodeType.Keyword)
{
if (f.NodeKey == "expnd")
{
f.Parameter = spacing;
}
if (f.NodeKey == "expndtw")
{
f.Parameter = spacing * 5;
}
if (f.NodeKey == "ltrch")
{
hasltrch = true;
}
if (f.NodeKey == "rtlch")
{
hasrtlch = true;
}
} } if (spacing > 0)
{
if (hasText)
{
bool ispar = false; for (int i = fileds.Count - 1; i >= 0; i--)
{
var f = fileds[i];
if (f.NodeKey == "par")
{
ispar = true; }
if (f.NodeKey == "u" || f.NodeKey == "'" || f.NodeType == RtfNodeType.Text)
{
continue;
}
else
{
if (ispar)
{
if (fileds[i - 1].NodeKey.Contains("expnd"))
{
continue;
}
InsertLetterExpand(spacing, doc, f.Index);
ispar = false;
}
}
if (f.NodeType == RtfNodeType.Group)
{
if (f.ChildNodes[0].NodeKey == "colortbl" || f.ChildNodes[0].NodeKey == "fonttbl")
{
if (!doc.MainGroup[f.Index + 1].NodeKey.Contains("expnd"))
{
InsertLetterExpand(spacing, doc, f.Index + 1);
i -= 2;
}
else
{
continue;
} }
}
if (f.NodeKey == "viewkind")
{
if (!doc.MainGroup[f.Index - 1].NodeKey.Contains("expnd"))
{
InsertLetterExpand(spacing, doc, f.Index);
i--;
}
continue;
}
}
}
else
{
for (int i = fileds.Count - 1; i >= 0; i--)
{
var f = fileds[i];
if (f.NodeKey == "par")
{
InsertLetterExpand(spacing, doc, f.Index - 1);
break;
}
}
}
} if (!hasltrch)
{
doc.MainGroup.InsertChild(1, new RtfTreeNode(RtfNodeType.Keyword, "ltrch", false, 0));
}
if (!hasrtlch)
{
doc.MainGroup.InsertChild(1, new RtfTreeNode(RtfNodeType.Keyword, "rtlch", false, 0));
} this.Rtf = doc.Rtf;
} private void InsertLetterExpand(int spacing, RtfTree doc, int index)
{
doc.MainGroup.InsertChild(index, new RtfTreeNode(RtfNodeType.Keyword, "expnd", true, spacing));
doc.MainGroup.InsertChild(index, new RtfTreeNode(RtfNodeType.Keyword, "expndtw", true, spacing * 5));
}

  

rtf格式 C#设置字间距 CharacterSpacing的更多相关文章

  1. NSAttributedString之设置字间距与行间距

    // 调整行间距 NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithSt ...

  2. UILabel设置行间距和字间距并计算高度-b

    #define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...

  3. Lodop设置文本项行间距、字间距

    LODOP给文本项ADD_PRINT_TEXT设置字间距.行间距,可以在打印设计页面,右键属性里设置,然后在打印设计生成代码,也可以直接写代码.LineSpacing行间距.LetterSpacing ...

  4. iOS UILabel设置行间距和字间距

    实现UILabel的文字,设置行间距和字间距. 效果图: 代码: let lblTitle = UILabel(frame: CGRect(x: , y: , width: KScreenWidth- ...

  5. [图片问答]LODOP打印的行间距字间距

    LODOP可以打印纯文本,也可以是超文本,关于哪些打印项是纯文本,哪些打印项是超文本,之前有博文相关介绍:LODOP中的纯文本和超文本打印项. 之前的关于纯文本的行间距字间距介绍:Lodop设置文本项 ...

  6. 使用CSS设置行间距,字间距.

    字间距1.text-indent设置抬头距离css缩进即对,对应div设置css样式text-indent : 20px; 缩进了20px 2.letter-spacing来设置字与字间距_字符间距离 ...

  7. css 字间距、CSS字体间距、css 字符间距设置

    1.text-indent设置抬头距离css缩进 2.letter-spacing来设置字与字间距_字符间距离,字体间距css样式

  8. textview设置字体的行距和字间距

    字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal. ...

  9. css如何设置label的字间距

    css.html如何设置label的字间距 .myClass  label{ letter-spacing: 10px; } 如果label需要居中,需加上 text-indent: 10px; 首行 ...

随机推荐

  1. PAT 甲级 1002 A+B for Polynomials (25 分)

    1002 A+B for Polynomials (25 分) This time, you are supposed to find A+B where A and B are two polyno ...

  2. redis在游戏服务器中的使用初探(四) redis应用

    文章系列先介绍环境搭建 介绍redis操作和代码编写运行  这是典型的实战工程过程.那么我们为何要使用redis而不是常规的数据库比如 mysql呢? 因为KV内存数据库最大的优势所有数据全部存储在内 ...

  3. SQL 不常用的一些命令sp_OACreate,xp_cmdshell,sp_makewebtask

    开启和关毕xp_cmdshell   EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cm ...

  4. Django手册

    Django教程 Python一直是我最喜欢的语言,在Django和Tornado之间我选择了前者,没有特别的原因,网上人云亦云的,肯定不会有一方离另一方差很远,我就直接去看了看Github上两个项目 ...

  5. html-day06

    html-day06 1.定位 定位: 1.普通流定位 普通流,又称为文档流 块级元素:从上到下一个一个的排列 行内元素:一行内从左到右的排列 2.浮动定位 1.什么是浮动定位 将元素排除在普通流之外 ...

  6. sock5客户端解密数据流

    一.安装 略 二.配置 vi /etc/shadowsocks.json { "server":"x.x.x.x", , , "password&qu ...

  7. GitHub--创建新的分支(转)

    如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...

  8. 解决eclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题

    解决eclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题. 有时候是src/main/resources下面的,有时候是sr ...

  9. (转载)Linux之虚拟机 rehl7的ip

    RHEL7最小化安装之后(桥接模式),我们查看本机IP, ip addr 我们要修改配置文件 找到目录 找到文件(每个人的ifcfg-eno16777736都不同),用vi编辑器打开修改配置文件 保存 ...

  10. 微服务应用新趋势:Service Mesh、AIOps和中台化

    微服务技术由于天生支持快速迭代.弹性扩展的特点,使企业能够在不确定性下提升发展速度及抗风险能力,受到了越来越多的关注.当前,云服务商纷纷试水微服务产品,最为典型的,当属推出轻舟微服务平台.剑指整个微服 ...