C# Windows窗体Richtextbox。如何在'中查找粗体、下划线和其他文本格式;rtf&x27;并为第三方供应商插入其他标签
谢谢你的阅读 我将RTF文本存储在一个数据库列中,该列可以包含来自Windows窗体Richtextbox的粗体、斜体、下划线和其他文本格式。我们需要将文本导出到具有不同定义的标记集的第三方供应商,该标记集告诉供应商如何格式化文本。不幸的是,第三方供应商不能读取RTF格式,也不能读取HTML、XML等 我们需要在richtextbox中导出“纯”文本,但找到用户在文本中添加粗体、斜体、下划线和其他格式的位置,并替换为第三方供应商标记 例如。。。我需要解析下面的rtf之类的东西 {\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Verdana;}\viewkind4\uc1\pard\f0\fs18这是\b bold\par\par\b0这是\b\b0\i斜体\par\par\i0这是\ul underline\ulnone\par} 并创建如下内容: “这是[B]粗体[B] 这是斜体字 这是[U]下划线[U]” 有人知道如何做到这一点吗C# Windows窗体Richtextbox。如何在'中查找粗体、下划线和其他文本格式;rtf&x27;并为第三方供应商插入其他标签,c#,.net,vb.net,C#,.net,Vb.net,谢谢你的阅读 我将RTF文本存储在一个数据库列中,该列可以包含来自Windows窗体Richtextbox的粗体、斜体、下划线和其他文本格式。我们需要将文本导出到具有不同定义的标记集的第三方供应商,该标记集告诉供应商如何格式化文本。不幸的是,第三方供应商不能读取RTF格式,也不能读取HTML、XML等 我们需要在richtextbox中导出“纯”文本,但找到用户在文本中添加粗体、斜体、下划线和其他格式的位置,并替换为第三方供应商标记 例如。。。我需要解析下面的rtf之类的东西 {\rtf1\an
非常感谢您的帮助。谢谢您的评论。虽然不是很有效,也不是很优雅,但这正是我所需要的。再次感谢大家
Public Shared Function ParseRTF(ByRef rtf As RichTextBox) As String
Dim returnText As String = ""
Dim isBold As Boolean = False
Dim isUnderline As Boolean = False
Dim isItalics As Boolean = False
Dim isBullets As Boolean = False
Dim isBoldBegin As Boolean = False
Dim isUnderlineBegin As Boolean = False
Dim isItalicsBegin As Boolean = False
Dim isBulletsBegin As Boolean = False
Dim isBoldEnd As Boolean = False
Dim isUnderlineEnd As Boolean = False
Dim isItalicsEnd As Boolean = False
Dim isBulletsEnd As Boolean = False
Dim tags As String = String.Empty
Dim bold As String = "<B>"
Dim underline As String = "<U>"
Dim italics As String = "<I>"
Dim bullet As String = "<T2><BULLET>"
Dim newLine As String = "<NL>"
Dim lastChar As String = String.Empty
rtf.SelectionStart = 0
rtf.SelectionLength = 0
Try
For x As Integer = 0 To rtf.TextLength - 1
rtf.SelectionStart = x
rtf.SelectionLength = 1
tags = String.Empty
isBoldBegin = False
isBoldEnd = False
isUnderlineBegin = False
isUnderlineEnd = False
isItalicsBegin = False
isItalicsEnd = False
'Test if text has formatting
If rtf.SelectionFont.Bold Then
If Not isBold Then
isBoldBegin = True
isBold = True
isBoldEnd = False
End If
Else
If isBold Then
isBoldBegin = False
isBold = False
isBoldEnd = True
End If
End If
If rtf.SelectionFont.Italic Then
If Not isItalics Then
isItalicsBegin = True
isItalics = True
isItalicsEnd = False
End If
Else
If isItalics Then
isItalicsBegin = False
isItalics = False
isItalicsEnd = True
End If
End If
If rtf.SelectionFont.Underline Then
If Not isUnderline Then
isUnderlineBegin = True
isUnderline = True
isUnderlineEnd = False
End If
Else
If isUnderline Then
isUnderlineBegin = False
isUnderline = False
isUnderlineEnd = True
End If
End If
'END Test if text has formatting
' Do reverse order if for any "END" tags
If isUnderlineEnd Then
tags += underline
End If
If isItalicsEnd Then
tags += italics
End If
If isBoldEnd Then
tags += bold
End If
'Work with beginning tags
If isBoldBegin Then
tags += bold
End If
If isItalicsBegin Then
tags += italics
End If
If isUnderlineBegin Then
tags += underline
End If
If x = rtf.TextLength - 1 Then
If isUnderline Then
lastChar += underline
End If
If isItalics Then
lastChar += italics
End If
If isBold Then
lastChar += bold
End If
End If
If rtf.SelectedText.Contains(vbLf) Then
If Not String.IsNullOrWhiteSpace(tags) Then
If isBoldBegin Or isUnderlineBegin Or isItalicsBegin Then
returnText += newLine & tags
End If
If isBoldEnd Or isUnderlineEnd Or isItalicsEnd Then
returnText += tags & newLine
End If
Else
returnText += newLine
End If
Else
returnText += tags & rtf.SelectedText
End If
If Not String.IsNullOrWhiteSpace(lastChar) Then
returnText += lastChar
End If
Next
Return returnText
Catch ex As Exception
Throw New CvrException(ex, ErrorCodes.UNKNOWN_ERROR)
Finally
End Try
End Function
公共共享函数ParseRTF(ByRef rtf作为RichTextBox)作为字符串
Dim returnText As String=“”
Dim isBold作为布尔值=False
Dim isUnderline为布尔值=False
将isItalics设置为布尔值=False
将项目符号设置为布尔值=False
Dim isBoldBegin为布尔值=False
Dim isUnderlineBegin作为布尔值=False
Dim isItalicsBegin As Boolean=False
尺寸isBulletsBegin为布尔值=假
Dim isBoldEnd为布尔值=False
尺寸显示为布尔值=假
Dim isItalicsEnd为布尔值=False
Dim isBulletsEnd As Boolean=False
Dim标记为String=String.Empty
暗黑体为String=“”
将下划线变暗为字符串=“”
将斜体标注为String=“”
将项目符号变暗为String=“”
将换行符变暗为字符串=“”
Dim lastChar As String=String.Empty
rtf.SelectionStart=0
rtf.SelectionLength=0
尝试
对于x作为整数=0到rtf.TextLength-1
rtf.SelectionStart=x
rtf.SelectionLength=1
tags=String.Empty
isBoldBegin=False
isBoldEnd=False
isUnderlineBegin=False
isd=False
isItalicsBegin=False
isItalicsEnd=False
'测试文本是否具有格式
如果rtf.SelectionFont.Bold,则
如果不是的话,请用粗体
isBoldBegin=True
isBold=True
isBoldEnd=False
如果结束
其他的
如果是粗体的话
isBoldBegin=False
isBold=False
isBoldEnd=True
如果结束
如果结束
如果rtf.SelectionFont.Italic,则
如果不是伊斯兰主义者,那么
isItalicsBegin=True
伊斯兰主义=真
isItalicsEnd=False
如果结束
其他的
如果是伊斯兰主义者那么
isItalicsBegin=False
isItalics=错误
isItalicsEnd=True
如果结束
如果结束
如果rtf.SelectionFont.Underline,则
如果不是,那么
isUnderlineBegin=True
isUnderline=True
isd=False
如果结束
其他的
如果是下划线,那么
isUnderlineBegin=False
isUnderline=False
isd=True
如果结束
如果结束
'如果文本具有格式,则结束测试
'如果有任何“结束”标记,请按相反顺序执行
如果我被解雇了
标记+=下划线
如果结束
如果是isItalicsEnd那么
标记+=斜体
如果结束
如果是boldend,那么
标签+=粗体
如果结束
'使用开始标记
如果我开始的话
标签+=粗体
如果结束
如果是伊斯兰主义,那就开始吧
标记+=斜体
如果结束
如果是我的话
标记+=下划线
如果结束
如果x=rtf.TextLength-1,则
如果是下划线,那么
lastChar+=下划线
如果结束
如果是伊斯兰主义者那么
lastChar+=斜体
如果结束
如果是粗体的话
lastChar+=粗体
如果结束
如果结束
如果rtf.SelectedText.Contains(vbLf),则
如果不是String.IsNullOrWhiteSpace(标记),则
如果isBoldBegin或isUnderlineBegin或isItalicsBegin,则
returnText+=换行符和标记
如果结束
如果isBoldEnd或IsUnderlined或isItalicsEnd,则
returnText+=标记和换行符
如果结束
其他的
returnText+=换行符
如果结束
其他的
返回文本