RTF初探一

     经过上一遍关于RTF的编码规则,对RTF格式的文本有了初步的了解,下面就是要用这些基础去解决在项目中遇到的问题。

项目情景:公司正在开发一个关于考试的系统,要用Silverlight来做,数据库中存贮的是RTF格式的二进制文件,在刚开始做的时候没有考虑到silverlight不支持RTF格式的文件,所以在前期也没考虑太多,采编部就在数据库中录入RTF格式的文件。随着项目的进行,出现了问题,silverlight不能显示RTF格式的文件,虽然Silverlight自带了一个RichTextBox控件,但是这个控件是有缺陷的,只支持XAML格式,于是就自定义一个控件.刚开始的想法是自定义的控件支持HTML格式的文件,所以把RTF格式的文件,转换成HTML格式的文件,这个转换过程是用国外一个牛人开发的工具转换的,这么一折腾,可以在自定义的控件中显示HTML格式的文件了.但是新的问题有出现了,有的试题是有图片的,转换成HTML后是图片的路径,这样图片是显示不出来的,经过查资料(RTF初探),了解了RTF格式存贮图片的格式,于是就把RTF格式的文件转换成了图片:以下是转换的代码:

 1 public void class()
2 {
3 public void exchange()
4 {
5 System.Text.ASCIIEncoding converter = new System.Text.ASCIIEncoding();
6 //topic二进制的RTF格式的文件
7 string spcontent = converter.GetString(topic);
8 Match mat = Regex.Match(spcontent, @"picw[\d]+");
9 mat = Regex.Match(spcontent, @"picwgoal[\d]+");
10 //图片的宽
11 int width = int.Parse(mat.Value.Replace("picwgoal", "")) / 15;
12 mat = Regex.Match(spcontent, @"pichgoal[\d]+");
13 //图片的高
14 int hight = int.Parse(mat.Value.Replace("pichgoal", "")) / 15;
15 string content = spcontent.Substring(mat.Index + mat.Length, spcontent.IndexOf("}", (mat.Index + mat.Length)) - (mat.Index + mat.Length));
16 string text = data.Replace("\r\n", "").Replace(" ", "");
17
18 int _Count = text.Length / 2;
19 byte[] buffer = new byte[_Count];
20 for (int z = 0; z != _Count; z++)
21 {
22 string _TempText = text[z * 2].ToString() + text[(z * 2) + 1].ToString();
23 buffer[z] = Convert.ToByte(_TempText, 16);
24 }
25 MemoryStream m = new MemoryStream(buffer);
26 using (Bitmap bmp = new Bitmap(m, true))
27 {
28 using (Bitmap bmp1 = new Bitmap(bmp, width,hight))
29 {
30
31 bmp1.Save(HttpContext.Current.Server.MapPath("images") + "\\SL.jpg");
32
33 }
34
35 }
36 }
37 }
posted @ 2011-07-17 12:53  .NET探寻者  阅读(964)  评论(2编辑  收藏  举报