使用C#编程对RTF文档进行操作

使用C#编程对RTF文档进行操作

ID:37460655

大小:52.00 KB

页数:14页

时间:2019-05-24

使用C#编程对RTF文档进行操作_第1页
使用C#编程对RTF文档进行操作_第2页
使用C#编程对RTF文档进行操作_第3页
使用C#编程对RTF文档进行操作_第4页
使用C#编程对RTF文档进行操作_第5页
资源描述:

《使用C#编程对RTF文档进行操作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、笔者正在用C#开发一个名为XWriter的文本编辑器,其中需要提供对RTF文档的支持,以前从没有搞过RTF文档,因此临时突击研究了一下,经过几天的学习研究和实践,对C#操作RTF文档有所了解,因此才可以写出此文给予说明,希望能对其他人学习RTF文档格式有所帮助。  RTF文档格式是微软提出的一种用于描述带格式文本的文档格式,上个世纪就提出来了,一直用到现在,而且很多程序都支持这种格式,微软的Office软件家族,Windows写字板软件等等都支持,而且Windows操作系统的剪切板和OLE拖拽操作也支持RTF文档,这样就允许不同的软件通过RTF格式相互交流带格式文本。比

2、如我用的VS.NET2003中的C#代码编辑器,在其中复制了一段代码文本,在MSWord中粘贴所得就是具有高亮度显示的文本。因此RTF格式的作用还是不小的,而且RTF格式是纯文本格式,不是二进制格式,读写都不算难。  RTF文档格式和HTML,XML之类的标记语言有点类似,原理不复杂,但内容还是比较多的,在微软的MSND中就有文章详细的介绍了RTF格式,地址是ms-help://MS.MSDNQTR.2003FEB.2052/dnrtfspec/html/rtfspec.htm,你用记事本打开一个RTF文档,可以发现其中也是纯文本数据,而且一般全是ANSI字符,RTF文

3、档一般采用ASNI字符编码格式进行存储,其中是不能直接保存汉字等编码大于127的字符,要保存得使用转义字符。RTF文档中使用一对花括号"{}"来定义一个组,组可以套嵌定义;用""来开始定义一个指令和转义字符;此外还能包含纯文本数据。所有的指令和转义字符都必须包含在一个组中,一个RTF文档只有一个根组,这点有点类似XML文档只能有一个根节点的规定。  我们使用Windows写字板新建一个RTF文档,只输入"Hellow"文本,设置文本颜色为蓝色,然后保存,然后使用记事本打开刚刚保存的RTF文件,此时就能看到一个最简单的RTF文档的内容了,其内容如下。  {  rtf1

4、ansiansicpg936deff0deflang1033deflangfe2052  {fonttbl  {f0fmodernfprq6fcharset134'cb'ce'cc'e5;}  }  {colortbl;red0green0blue255;}  {*generatorMsftedit5.41.15.1507;}  viewkind4uc1pardcf1lang2052f0fs20Hellowcf0par  }  此处为了便于阅读,对代码进行了缩进处理,实际上RTF文档中空白字符是会影响到显示结果的

5、,一般实际生成RTF文档时不要添加额外的空白字符。  这段RTF代码第一行和最后一行是表示根组的花括号,然后是""开头的指令,指令名称全部由英文字母组成,若指令后面跟着若干个数字,则这些数字就是指令的参数。比如"rtf1",这个指令名称是"rtf",参数值是"1";而"ansi"指令名称是"ansi",没有参数。  指令"rtf"是每个RTF文档必备的,而且总是第一个指令,因此可以看作RTF文档的文件头标记。若一个RTF文档第一个指令不是"rtf"指令,则可以认为这个RTF文档是不合法的。  指令"ansicpg"就是说明该RTF文档的内容的编码格式,参数就是

6、编码格式编号,例如"ansicpg936"就是指明编码格式为936号字符集,对于C#程序来说,就是库函数System.Text.Encoding.GetEncoding(936)的返回结果,也就是GB2312编码格式。RTF文档本身肯定是使用标准的ANSI格式保存的,此处指明的字符编码格式是用于处理RTF文档中的转义字符的,比如代码中由连续的转义字符'cb'ce'cc'e5,程序解析RTF文档时,应当将这一串转义字符生成一个字节数组,内容为0xcb,0xce,0xcc,0xe5,然后使用第936号编码格式对象的GetString(byte[])函数来还原所存储

7、的字符串,也就是"宋体"两个字。这点比HTML的转义字符处理要麻烦一些,HTML转义字符是一个指令定义一个字符,而RTF中的是一个指令定义一个字节,而汉字是双字节的字符编码,转化前还得设法获得完整的字节序列。  指令"fonttbl"定义了文档中使用的所有的字体的列表,RTF文本内容引用这个字体列表来获得显示文档使用的字体,这和HTML文档中统一定义CSS样式有点类似。"fonttbl"组中由若干个子组,每个子组定义一个字体,字体定义组的第一个指令为"f",带有一个参数指明字体的编号,比如"f0"指明这个字体编号为0,"f1"指明

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。