【问题标题】:Change Font Family and Font Size using HtmlAgilitPack使用 HtmlAgilitPack 更改字体系列和字体大小
【发布时间】:2018-02-14 18:05:58
【问题描述】:

我需要将给定 HTML 的 font familyfont size 更改为特定的 font family 和 size。 (例如:Times New Romen,大小:12)你知道如何使用 HtmlAgilityPack 完成吗?

可以在给定的 html 中以多种方式定义字体大小。例如:使用<Font Size="" tag, <H3>,也是样式标签。因此,我需要将所有字体更改为特定的字体大小。

以下是示例 HTML 代码:

    <html><H3 style="MARGIN: 0in 0in 0pt 0.5in"><SPAN style="mso-bidi-font-family: &#39;Tw Cen MT Condensed Extra Bold&#39;; mso-fareast-font-family: &#39;Tw Cen MT Condensed Extra Bold&#39;"><SPAN style="mso-list: Ignore"><FONT size="5" face="Tw Cen MT Condensed Extra Bold">1.1.1</FONT><SPAN style="FONT: 7pt &#39;Times New Roman&#39;">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size="5" face="Tw Cen MT Condensed Extra Bold">Sample text1: The following code iterates through all the items in the ListBox and addsPictureBoxes dynamically to a FlowLayoutPanel using the image sources retrieved in the previous step.</FONT></H3>
<P style="MARGIN: 0in 0in 0pt" class="MsoNormal"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?></P>
<H3 style="MARGIN: 0in 0in 0pt 0.5in"><SPAN style="mso-bidi-font-family: &#39;Tw Cen MT Condensed Extra Bold&#39;; mso-fareast-font-family: &#39;Tw Cen MT Condensed Extra Bold&#39;"><SPAN style="mso-list: Ignore"><FONT size="5" face="Tw Cen MT Condensed Extra Bold">1.1.2</FONT><SPAN style="FONT: 7pt &#39;Times New Roman&#39;">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size="5" face="Tw Cen MT Condensed Extra Bold">Sample text 2: The following code iterates through all the items in the ListBox and addsPictureBoxes dynamically to a FlowLayoutPanel using the image sources retrieved in the previous step.</FONT></H3>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2; tab-stops: list .5in" class="MsoNormal"><SPAN style="FONT-FAMILY: &#39;Bauhaus 93&#39;; FONT-SIZE: 20pt; mso-bidi-font-family: &#39;Bauhaus 93&#39;; mso-fareast-font-family: &#39;Bauhaus 93&#39;"><SPAN style="mso-list: Ignore">a.<SPAN style="FONT: 7pt &#39;Times New Roman&#39;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: &#39;Bauhaus 93&#39;; FONT-SIZE: 20pt">Sample text 3: The following code iterates through all the items in the ListBox and addsPictureBoxes dynamically to a FlowLayoutPanel using the image sources retrieved in the previous step.</SPAN></P>
<P style="MARGIN: 0in 0in 0pt 0.25in" class="MsoNormal"><SPAN style="FONT-FAMILY: &#39;Bauhaus 93&#39;; FONT-SIZE: 20pt"></SPAN></P>
<P style="MARGIN: 0in 0in 0pt 0.5in" class="MsoNormal"><SPAN style="FONT-FAMILY: &#39;Bradley Hand ITC&#39;; FONT-SIZE: 18pt">Sample Text 4: The following code iterates through all the items in the ListBox and addsPictureBoxes dynamically to a FlowLayoutPanel using the image sources retrieved in the previous step.</SPAN></P></html>

【问题讨论】:

    标签: c# html html-agility-pack


    【解决方案1】:

    我使用 HtmlAgilityPack 做到了这一点。以下是我开发的代码。

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(inputHtml);
    var elementsWithStyleAttribute = doc.DocumentNode.SelectNodes(string.Concat("//", tagName));
    
    if (null == elementsWithStyleAttribute)
    {
        return inputHtml;
    }
    
    foreach (var element in elementsWithStyleAttribute)
    {
        var classElement = element.GetAttributeValue("class", null);
    
        if (!string.IsNullOrWhiteSpace(classElement))
        {
            // Remove class attribute.
            element.Attributes["class"].Remove();
        }
    
        var styles = element.GetAttributeValue("style", null);
    
        if (!string.IsNullOrWhiteSpace(styles)) //&& (styles.ToUpper().Contains("FONT-FAMILY:") || styles.ToUpper().Contains("FONT-SIZE:")))
        {
            element.Attributes["style"].Remove();
    
            string[] splitter = { ";" };
            string[] styleClasses = styles.Split(splitter, StringSplitOptions.None);
    
            StringBuilder sbStyles = new StringBuilder("font-family:Arial; font-size:10pt;");
    
            if (null != styleClasses && styleClasses.Length > 0)
            {
                foreach (var item in styleClasses)
                {
                    if (!string.IsNullOrWhiteSpace(item) && !item.ToUpper().Contains("FONT-FAMILY:")
                        && !item.ToUpper().Contains("FONT-SIZE:") && !item.ToUpper().Contains("FONT:"))
                    {
                        // Add existing styles except font size and font family styles.
                        sbStyles.Append(item.Trim());
                        sbStyles.Append(";");
                    }
                }
            }
    
            element.SetAttributeValue("style", sbStyles.ToString());
        }
        else
        {
            element.SetAttributeValue("style", "font-family:Arial; font-size:10pt;");
        }
    }
    
    return doc.DocumentNode.InnerHtml;
    

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 2011-12-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多