C#如何将RTF格式以及Word提取的文本转换为可读字符串
C# RTF编码转纯文本实现方案
实现思路
不用手动解析RTF语法规则,直接用成熟的RTF解析组件处理,兼容绝大多数标准RTF格式,代码量小且稳定性高。
方案1:基于RichTextBox实现(无需第三方依赖)
利用.NET框架自带的System.Windows.Forms.RichTextBox控件的RTF解析能力,后台调用不会弹出UI窗口,适合WinForm项目,非WinForm项目引用System.Windows.Forms程序集即可使用。
代码示例
/// <summary> /// RTF编码内容转纯文本 /// </summary> /// <param name="inputContent">输入的原始内容,可能包含普通文本或RTF编码</param> /// <returns>解析后的可读纯文本</returns> public string ConvertRtfToText(string inputContent) { // 空内容直接返回 if (string.IsNullOrWhiteSpace(inputContent)) return string.Empty; // 非RTF格式内容直接返回原内容 var trimmedContent = inputContent.TrimStart(); if (!trimmedContent.StartsWith("{\\rtf")) return inputContent.Trim(); using (var richTextBox = new RichTextBox()) { try { richTextBox.Rtf = inputContent; // 可根据业务需求调整换行、空白处理逻辑,不需要直接返回richTextBox.Text即可 return richTextBox.Text .Replace("\r\n", "\n") .Trim(); } catch (ArgumentException) { // RTF格式非法时返回原内容 return inputContent.Trim(); } } }
方案2:轻量无UI依赖方案(基于RtfPipe)
如果不想引用WinForms程序集,可以用开源的RTF解析库RtfPipe,适合控制台、ASP.NET Core等非UI项目。
操作步骤
- 安装NuGet包:
Install-Package RtfPipe - 调用代码示例:
using RtfPipe; public string ConvertRtfToText(string inputContent) { if (string.IsNullOrWhiteSpace(inputContent)) return string.Empty; var trimmedContent = inputContent.TrimStart(); if (!trimmedContent.StartsWith("{\\rtf")) return inputContent.Trim(); try { return Rtf.ToText(inputContent).Trim(); } catch { return inputContent.Trim(); } }
效果说明
你提供的示例RTF内容经过上述方法解析后,输出的纯文本如下:
8APE100L-4K-IE3
2,2 KW, 4-polig, 230/400V, 50Hz, B5/A250, IP55Neutrales Zusatztypenschild mit folgenden Angaben:
2,2 kW, 400-440V/Y, 50 Hz, 1465min-1
2,2 kW, 400-440V/Y, 60 Hz, 1760min-1
你可以根据业务需求额外添加连续空白合并、多余空行删除的逻辑适配自己的使用场景。
内容的提问来源于stack exchange,提问作者Skander Chouba
相关产品推荐
相关产品推荐

