我有这种方法可以将我的富文本解析为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;");
显然,我要做的是找到所有错误的font-size声明,附加pt,同时保持它们已经存在的整数大小。
答案 0 :(得分:3)
使用RegEx?类似的东西:
var regex = new Regex(@"(font-size:\s?\d+)");
regex.Replace(yourHtml, "$1pt");
答案 1 :(得分:2)
你可以用这样的循环来做到这一点
for(int i=12; i < 1001; i++)
{
sb.Replace("font-size:"+i.ToString()+";", "font-size:" i.ToString()+ "pt;");
}
答案 2 :(得分:1)
您可以使用Regex.Replace(string input, string pattern, string replacement),如下所示:
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;
}