C#操作RTF文档
http://tech.ddvip.com 2007年11月20日 社区交流
内容摘要:笔者正在用C#开发一个名为XWriter的文本编辑器,其中需要提供对RTF文档的支持,以前从没有搞过RTF文档,因此临时突击研究了一下,经过几天的学习研究和实践,对C#操作RTF文档有所了解,因此才可以写出此文给予说明,希望能对其他人学习RTF文档格式有所帮助。
指令"fonttbl"定义了文档中使用的所有的字体的列表,RTF文本内容引用这个字体列表来获得显示文档使用的字体,这和HTML文档中统一定义CSS样式有点类似。"fonttbl"组中由若干个子组,每个子组定义一个字体,字体定义组的第一个指令为"f",带有一个参数指明字体的编号,比如"f0"指明这个字体编号为0,"f1"指明字体编号为1。字体定义组还定义了关于字体的其他信息,其中最重要的就是最后的字体名称了。此演示文档中,字体的名称就是"'cb'ce'cc'e5;",经过编码后就是"宋体;",小心后面还有个分号。注意字体编号可能是不连续的,比如可以存在这样的字体表代码"{f0...}{f1...}{f99...}{f212...}",因此解析RTF字体表时要考虑这点。
指令"colortbl"定义了文档颜色表,RTF文档是统一引用颜色值的,文档内容的文本颜色,背景色等颜色设置都是引用颜色表的,RTF颜色表中只定义了各个颜色的RGB值,没有明确的定义编号,引用时是按照从左到右的顺序引用颜色的,而且颜色值的编号是从“1”开始计算的。此处定义了一个颜色值" ed0green0lue255",也就是纯蓝色。
指令"*generator"是定义了文档的创建者,此处定义指令的方式比较特殊,采用了"*"前缀,个人理解是定义了一种扩展指令,其他的RTF文档处理程序遇到这样的指令可以忽略不计。
后面的指令就是开始描述RTF文档的正文了,比如"pard"开始清除当前段落设置,当前段落设置为默认格式;"f0"表示设置当前字体为字体表中编号为"0"的字体;"fs20"设置字体大小,此处的字体大小为"20",单位是半个点(MSND是这样说的:Fontsizeinhalf-points(thedefaultis24));"cf1"表示当前文本颜色采用第一号颜色,即纯蓝色(RTF颜色表序号从1开始计算);还有纯文本数据"Hellow"就是RTF文档的纯文本内容了。
责编:豆豆技术应用