首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLWorkerHelper有序列表样式

XMLWorkerHelper有序列表样式
EN

Stack Overflow用户
提问于 2014-07-14 21:46:15
回答 1查看 797关注 0票数 0

我需要在从HTML生成的pdf格式中设计有序列表元素。我知道这不是我尝试过的方式支持的http://demo.itextsupport.com/xmlworker/itextdoc/CSS-conformance-list.htm

代码语言:javascript
复制
ol li:before {
    content: counter(cnt-1) ". ";
    counter-increment: cnt-1
}

ol > li > ol > li > ol li:before {
    content: counter(cnt-1) "." counter(cnt-2) "." counter(cnt-3);
    counter-increment: cnt-3
}

有没有什么解决方案可以将处理ol属性(内容、计数器、计数器增量)添加到itextsharp中?

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 21:59:21

我使用HtmlAgility + CSS处理嵌套的ul元素,然后再转换为PDF。

代码语言:javascript
复制
ol { list-style-type:none; list-style:none;}



public string CustomOrderedListNumbering(StringBuilder sb, string xpathRoot)
        {
            HtmlDocument doc = new HtmlDocument() { OptionAutoCloseOnEnd = true };
            HtmlNode.ElementsFlags.Remove("meta");
            HtmlNode.ElementsFlags.Remove("link");
            doc.LoadHtml(sb.ToString());
            HtmlNodeCollection mainOls = doc.DocumentNode.SelectNodes(xpathRoot);

            if (mainOls != null)
            {

                foreach (HtmlAgilityPack.HtmlNode node in mainOls)
                {
                    Recursive(node, "", 1, 1);
                }
            }
            string htmlMainPart = doc.DocumentNode.InnerHtml;

            htmlMainPart = htmlMainPart.Replace("<br>", "<br />");
            return htmlMainPart;
        }

        private void Recursive(HtmlNode nodeOl, string baseNum, int depth, int counter)
        {
            HtmlNodeCollection lis = nodeOl.ChildNodes;

            foreach (var li in lis)
            {
                string num = baseNum + counter + ".";

                var textNode = li.SelectSingleNode("./text()") as HtmlTextNode;
                if (textNode == null)
                {
                    textNode = li.SelectSingleNode("./*/text()") as HtmlTextNode;
                }
                textNode.Text = num + " " + textNode.Text;

                var childOls = li.SelectNodes("ol[@class='number']");

                if (childOls != null)
                {
                    foreach (var cOl in childOls)
                    {
                        Recursive(cOl, num, depth + 1, 1);
                    }
                }

                counter++;
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24737991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档