2

リッチテキストをHTMLに解析するこのメソッドがあります。私はそれがこのようなインラインスタイルを構成しているいくつかの場所であることに気づきました:

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

font-sizeの最後に「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;");

明らかに、私がやろうとしているのは、タイプミスのあるfont-size宣言をすべて見つけて、ptを追加し、それらがすでに持っている整数サイズを維持することです。

4

3 に答える 3

3

RegExを使用していますか?何かのようなもの:

var regex = new Regex(@"(font-size:\s?\d+)");
regex.Replace(yourHtml, "$1pt");
于 2012-06-11T16:37:53.863 に答える
2

あなたはこのようなループでそれを行うことができます

for(int i=12; i < 1001; i++)
{    
    sb.Replace("font-size:"+i.ToString()+";", "font-size:" i.ToString()+ "pt;");    
}
于 2012-06-11T16:34:41.130 に答える
1

次のように、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;
}
于 2012-06-11T16:41:44.473 に答える