rtf格式 C#设置字间距 CharacterSpacing
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的更多相关文章
- NSAttributedString之设置字间距与行间距
// 调整行间距 NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithSt ...
- UILabel设置行间距和字间距并计算高度-b
#define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...
- Lodop设置文本项行间距、字间距
LODOP给文本项ADD_PRINT_TEXT设置字间距.行间距,可以在打印设计页面,右键属性里设置,然后在打印设计生成代码,也可以直接写代码.LineSpacing行间距.LetterSpacing ...
- iOS UILabel设置行间距和字间距
实现UILabel的文字,设置行间距和字间距. 效果图: 代码: let lblTitle = UILabel(frame: CGRect(x: , y: , width: KScreenWidth- ...
- [图片问答]LODOP打印的行间距字间距
LODOP可以打印纯文本,也可以是超文本,关于哪些打印项是纯文本,哪些打印项是超文本,之前有博文相关介绍:LODOP中的纯文本和超文本打印项. 之前的关于纯文本的行间距字间距介绍:Lodop设置文本项 ...
- 使用CSS设置行间距,字间距.
字间距1.text-indent设置抬头距离css缩进即对,对应div设置css样式text-indent : 20px; 缩进了20px 2.letter-spacing来设置字与字间距_字符间距离 ...
- css 字间距、CSS字体间距、css 字符间距设置
1.text-indent设置抬头距离css缩进 2.letter-spacing来设置字与字间距_字符间距离,字体间距css样式
- textview设置字体的行距和字间距
字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal. ...
- css如何设置label的字间距
css.html如何设置label的字间距 .myClass label{ letter-spacing: 10px; } 如果label需要居中,需加上 text-indent: 10px; 首行 ...
随机推荐
- [Django] Window上通过IIS发布Django网站
网上的教程坑实在多,以下是本人亲测通过的: 需要解决的问题: 1.使用 python manage.py runserver 来运行服务器,只适用测试环境中使用,正式发布的服务,需要一个可以稳定而持续 ...
- 网络传输 buf 封装 示例代码
网络传输 buf 封装 示例代码 使用boost库 asio // BufferWrapTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h&quo ...
- 2019.02.16 bzoj5466: [Noip2018]保卫王国(链分治+ddp)
传送门 题意简述: mmm次询问,每次规定两个点必须选或者不选,求树上的带权最小覆盖. 思路: 考虑链分治+ddpddpddp 仍然是熟悉的套路,先考虑没有修改的状态和转移: 令fi,0/1f_{i, ...
- Linux学习--- C语言关键字、数据类型
关键字: sizeof为关键字,并不是函数. 作用:编译器给我们查看内存空间容量的一个工具. eg:int a: printf("the size is %d\n",sizeof ...
- java对PDF文档的各种操作
https://www.cnblogs.com/h--d/p/6150320.html(仅以提醒,导航的作用)
- shell脚本学习-执行
跟着RUNOOB网站的教程学习的笔记 Shell与Shell脚本 Shell是用户与Linux系统的桥梁.它既是一种命令语言,也是一种程序设计语言. Shell脚本是一种Shell编写的脚本程序,其实 ...
- 2019swpuj2ee作业2--HTTP协议
简介: HTTP协议:超文本传输协议.它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.在七层模型中属于应用层.是一种请求/响应式的协议. 主要特点: (1)支持客户端/服 ...
- pop
package com.example.hellopopupwindow; import android.os.Bundle; import android.app.Activity; import ...
- java基础-位运算符
1.位运算符 << 左移 : 右边以0填充 >> 带符号右移: 负数前面补1,整数补0 >>>不带符号右移 & 按位与运算 ...
- 小试 boost spirit
解释文本文件是日常编程中太平常的一件事情了,一般来说,土鳖点的做法可以直接手写 parser 用循环暴力地去 map 文本上的关键字从而提取相关信息,想省力一点则可以使用 tokenizer 或正则表 ...