【问题标题】:Cleaning up RTF text清理 RTF 文本
【发布时间】:2008-08-21 16:30:49
【问题描述】:

我想获取一些 RTF 输入并清理它以删除除 \ul \b \i 之外的所有 RTF 格式,以便将其粘贴到带有次要格式信息的 Word 中。

用于粘贴到 Word 中的命令类似于: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0)(剪贴板中已有一些 RTF 文本)

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}
{\colortbl ;\red255\green255\blue140;}
\viewkind4\uc1\pard\highlight1\lang3084\f0\fs18 The company is a global leader in responsible tourism and was \ul the first major hotel chain in North America\ulnone  to embrace environmental stewardship within its daily operations\highlight0\par

您对如何使用一些正则表达式或其他东西安全地清理 RTF 有任何想法吗?我正在使用 VB.NET 进行处理,但任何 .NET 语言示例都可以。

【问题讨论】:

    标签: .net vb.net ms-word rtf


    【解决方案1】:

    我会使用一个隐藏的 RichTextBox,设置 Rtf 成员,然后检索 Text 成员,以一种支持良好的方式清理 RTF。然后我会在之后使用手动注入所需的格式。

    【讨论】:

      【解决方案2】:

      我会做如下的事情:

      Dim unformatedtext As String
      
      someRTFtext = Replace(someRTFtext, "\ul", "[ul]")
      someRTFtext = Replace(someRTFtext, "\b", "[b]")
      someRTFtext = Replace(someRTFtext, "\i", "[i]")
      
      Dim RTFConvert As RichTextBox = New RichTextBox
      RTFConvert.Rtf = someRTFtext
      unformatedtext = RTFConvert.Text
      
      unformatedtext = Replace(unformatedtext, "[ul]", "\ul")
      unformatedtext = Replace(unformatedtext, "[b]", "\b")
      unformatedtext = Replace(unformatedtext, "[i]", "\i")
      
      Clipboard.SetText(unformatedtext)
      
      oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0)
      

      【讨论】:

        【解决方案3】:

        您可以使用正则表达式去除标签。只需确保您的表达式不会过滤实际上是文本的标签。如果文本在正文中有“\b”,它将在 RTF 流中显示为 \b。换句话说,你会匹配 "\b" 而不是 "\b"。

        您可能会采取捷径并过滤掉标题 RTF 标记。在输入中查找“\viewkind4”的第一次出现。然后提前读到第一个空格字符。您将删除从文本开头直到并包括该空格字符的所有字符。这将去除 R​​TF 标头信息(字体、颜色等)。

        【讨论】:

          【解决方案4】:

          正则表达式,它不会完全正确地解析所有内容(例如表格),但在大多数情况下都能完成这项工作。

          string unformatted = Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");
          

          魔法 =)

          【讨论】:

            猜你喜欢
            • 2014-09-25
            • 2012-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-19
            相关资源
            最近更新 更多