[WinF] 富文本Rtf 解析

assky124 2008-12-18 12:42:41
如何将RichTextBox.RTF 中的字符串解析为自定义的格式?
效果:

RTF编码为:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5-PUA;}}
{\colortbl ;\red0\green255\blue0;\red255\green0\blue0;}
\viewkind4\uc1\pard\cf1\lang2052\f0\fs24 Hello World!\par
\cf2\f1\'c4\'e3\'ba\'c3}

我需要的格式为:
<FONT FACE="宋体" SIZE="9.0" COLOR="#00FF00">Hello World!</FONT>
<FONT FACE="宋体" SIZE="9.0" COLOR="#FF0000">你好</FONT>
...全文
1117 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
青色熊 2009-10-10
  • 打赏
  • 举报
回复
谢谢,学习中
F_sea 2008-12-30
  • 打赏
  • 举报
回复
e... 我只知道怎么提取 解析..我的神啊~~~
特别 2008-12-24
  • 打赏
  • 举报
回复
Ki1381 2008-12-22
  • 打赏
  • 举报
回复
学习,这也是困扰我的一个问题。
周公 2008-12-22
  • 打赏
  • 举报
回复
RichTextBox.SaveFile 方法 (String, RichTextBoxStreamType)

public enum RichTextBoxStreamType
PlainText 用空格代替对象链接与嵌入 (OLE) 对象的纯文本流。
RichNoOleObjs 用空格代替 OLE 对象的丰富文本格式(RTF 格式)流。该值只在用于 RichTextBox 控件的 SaveFile 方法时有效。
RichText RTF 格式流。
TextTextOleObjs 具有 OLE 对象的文本表示形式的纯文本流。该值只在用于 RichTextBox 控件的 SaveFile 方法时有效。
UnicodePlainText 包含用空格代替对象链接与嵌入 (OLE) 对象的文本流。该文本采用 Unicode 编码。

可否尝试利用这种方式得到纯文本再处理?

仅仅是一个思路的建议。
周公 2008-12-22
  • 打赏
  • 举报
回复
在 Windows 窗体 RichTextBox 控件中保存文件
将控件的内容保存到文件
确定要保存的文件的路径。

若要在实际应用程序中实现此操作,通常可使用 SaveFileDialog 组件。有关概述,请参见 SaveFileDialog 组件概述(Windows 窗体)。

调用 RichTextBox 控件的 SaveFile 方法,指定要保存的文件以及可选的文件类型。如果调用该方法时仅使用文件名作为其唯一参数,则该文件将保存为 RTF 文件。若要指定其他文件类型,请以 RichTextBoxStreamType 枚举的值作为其第二个参数来调用该方法。

在下面的示例中,RTF 文件位置的路径设置为“我的文档”文件夹。使用此位置是因为可假定大多数运行 Windows 操作系统的计算机都包含该文件夹。选择此位置还允许具有最低系统访问级别的用户安全地运行应用程序。下面的示例假定一个已添加了 RichTextBox 控件的窗体。

public void SaveFile()
{
// You should replace the bold file name in the
// sample below with a file name of your own choosing.
// Note the escape character used (@) when specifying the path.
richTextBox1.SaveFile(System.Environment.GetFolderPath
(System.Environment.SpecialFolder.Personal)
+ @"\Testdoc.rtf",
RichTextBoxStreamType.RichNoOleObjs);
}
Deathsign 2008-12-19
  • 打赏
  • 举报
回复
类库提供了 吧RTF转化成HTML或者其他格式的类·······

TextRange.Save好像是
assky124 2008-12-19
  • 打赏
  • 举报
回复
codeproject 分析的时候会卡下,可能是解析图片的问题吧,
我的不需要图片,简单点就好
kolosi 2008-12-19
  • 打赏
  • 举报
回复
codeproject上面有专门写好的类,虽然功能不是很完整,但还是不错的。
是是非非 2008-12-19
  • 打赏
  • 举报
回复
用正则表达式去分析吧
是是非非 2008-12-19
  • 打赏
  • 举报
回复
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052 //开头部分,你不用管了

{\fonttbl{\f0\fswiss\fcharset0 Arial;} //字体表1,Arial 标记为 \f0
{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5-PUA;} //字体表2,宋体 \'cb\'ce\'cc\'e5 这个是中文,把 \'替换成%就是UrlEncoding了 标记为 \f1

}
{\colortbl ; //颜色表
\red0\green255\blue0; //第一个,绿色
\red255\green0\blue0; //第二个,红色

}

\viewkind4\uc1\pard\cf1\lang2052\f0\fs24 Hello World!\par //第一段文字 \cf1 表示选用颜色表的第1个 \f0 表示使用第一个字体 Arial
\cf2\f1\'c4\'e3\'ba\'c3 //第二段文字 \cf2 表示选用颜色表中的第二个颜色, \f1 对应字体表中的 \f1 ,\'c4\'e3\'ba\'c3编码同上
}
kolosi 2008-12-19
  • 打赏
  • 举报
回复
哈哈,又见到解析rtf了,你的痛苦日子来临了。
HDNGO 2008-12-19
  • 打赏
  • 举报
回复
复杂~
dayizhixiaotutu 2008-12-19
  • 打赏
  • 举报
回复
学习 帮顶
assky124 2008-12-19
  • 打赏
  • 举报
回复
想了一天终于想到一个简单的方法
在类中实例一个RichTextBox控件,然后移动光标,判断当前位置的字体和颜色。

这个方法不是很好,实例RichTextBox控件应该很耗资源,有没更好的方法啊?
lovefootball 2008-12-18
  • 打赏
  • 举报
回复
我记着iTextSharp里面好像有类似的解析

RTF这个东西首先得弄明白他的格式吧
http://support.microsoft.com/?scid=kb%3Bzh-cn%3B86999&x=7&y=17
assky124 2008-12-18
  • 打赏
  • 举报
回复
不需要解析图片,这样太复杂了,只需要解析里面的文本和对应的字体
xsnakek 2008-12-18
  • 打赏
  • 举报
回复
RTF编码里面不是已经有"Hello World!"了吗?那可以取到。
至于“你好”,对应应该是"'c4\'e3\'ba\'c3",可能是gb32的内码,自己44就知道了。
tianshangfei 2008-12-18
  • 打赏
  • 举报
回复
oo
assky124 2008-12-18
  • 打赏
  • 举报
回复
没人做过么?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧