You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RichTextBox中强制使用自定义字体,忽略RTF源文件字体设置?

解决RichTextBox强制替换RTF字体的问题

之前的方法失效是因为RTF文件中存在字符级的字体设置,优先级高于你通过SelectionFont设置的全局选择字体,尤其是非ASCII字符可能被单独标记了字体属性。下面提供两种可行方案:

方案一:纯文本替换(简单粗暴,抛弃原格式)

如果不需要保留RTF中的换行、加粗等格式,直接将内容转为纯文本后设置字体即可:

richTextBox1.LoadFile(@".\test.rtf");
// 转为纯文本,清除所有RTF格式
richTextBox1.Text = richTextBox1.Text;
// 强制设置全局字体
richTextBox1.Font = new System.Drawing.Font("SVN-Avo", 12F);

方案二:修改RTF源码(保留其他格式,仅替换字体)

如果需要保留换行、加粗等格式,只替换字体,可以直接修改RTF的内容结构:

using System.IO;
using System.Text.RegularExpressions;

// 读取RTF文件内容
string rtfContent = File.ReadAllText(@".\test.rtf");

// 替换字体表:只保留自定义字体的定义
int fontTblStart = rtfContent.IndexOf(@"{\fonttbl");
int fontTblEnd = rtfContent.IndexOf("}", fontTblStart) + 1;
string newFontTbl = @"{\fonttbl{\f0\fnil\fcharset0 SVN-Avo;}}";
rtfContent = rtfContent.Remove(fontTblStart, fontTblEnd - fontTblStart).Insert(fontTblStart, newFontTbl);

// 替换所有字体引用为自定义字体的索引(\f0)
rtfContent = Regex.Replace(rtfContent, @"\\f\d+", @"\f0");

// 应用修改后的RTF
richTextBox1.Rtf = rtfContent;
richTextBox1.Font = new System.Drawing.Font("SVN-Avo", 12F);

这个方法通过修改RTF的字体表和所有字符的字体引用,从根源上强制所有内容使用你指定的字体,包括非ASCII字符。

内容的提问来源于stack exchange,提问作者Ooker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:25:20