用.Replace() 修复不正确的内联 css

本文关键字:css 不正确 Replace | 更新日期: 2023-09-27 18:36:59

我有这个方法可以将我的富文本解析为 HTML。我注意到它是像这样组成内联样式的某些地方:

<DIV STYLE="text-align:Left;font-family:Segoe UI;font-style:normal;font-weight:normal;font-size:12;color:#000000;">

请注意,字体大小在末尾缺少"pt",这在我导出为 PDF 时会破坏报告。

这是我处理它的代码:

public static string RtfToHtml(string rtfText)
    {
        if (String.IsNullOrEmpty(rtfText)) return rtfText;
        if (!rtfText.Contains(@"{'rtf1")) return rtfText.Replace("'r'n", "<br>").Replace("'r", "<br>");
        Converter converter = new Converter();
        StringBuilder sb = new StringBuilder(converter.ConvertRtfToHtml(rtfText));
        sb.Replace("font-size:12;", "font-size:12pt;");
        try
        {
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(sb.ToString());
            RemoveStyleTags(doc, "ol");
            RemoveStyleTags(doc, "ul");
            RemoveStyleTags(doc, "li");
            return doc.DocumentNode.InnerHtml;
        }
        catch { }
        return sb.ToString();
    }

我的问题是:有没有更优雅的方式来执行.Replace() 方法而不是这样做:

sb.Replace("font-size:12;", "font-size:12pt;");
sb.Replace("font-size:13;", "font-size:13pt;");
sb.Replace("font-size:14;", "font-size:14pt;");
...
sb.Replace("font-size:10000;", "font-size:10000pt;");

显然,我要做的是找到所有错误键入的字体大小声明,附加pt,同时保持它们已经拥有的整数大小。

用.Replace() 修复不正确的内联 css

使用 RegEx?像这样:

var regex = new Regex(@"(font-size:'s?'d+)");
regex.Replace(yourHtml, "$1pt");
你可以

用这样的循环来做到这一点

for(int i=12; i < 1001; i++)
{    
    sb.Replace("font-size:"+i.ToString()+";", "font-size:" i.ToString()+ "pt;");    
}

您可以使用 Regex.Replace(字符串输入、字符串模式、字符串替换),如下所示:

public static string RtfToHtml(string rtfText)
{
    if (String.IsNullOrEmpty(rtfText)) return rtfText;
    if (!rtfText.Contains(@"{'rtf1")) return rtfText.Replace("'r'n", "<br>").Replace("'r", "<br>");
    Converter converter = new Converter();
    StringBuilder sb = new StringBuilder(converter.ConvertRtfToHtml(rtfText));
    string html = Regex.Replace(sb.ToString(), @"font-size:('d*('.'d+)?);", @"font-size:$1pt;");
    try
    {
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);
        RemoveStyleTags(doc, "ol");
        RemoveStyleTags(doc, "ul");
        RemoveStyleTags(doc, "li");
        return doc.DocumentNode.InnerHtml;
    }
    catch { }
    return html;
}