난 당신이 content` 블록과`counter``에 도착하기 전에 PDF
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++;
}
}
로 변환하기 전에 HtmlAgility + CSS와 중첩 된 UL 요소를 처리, 당신은 실제로'해결해야합니다 : 어떤 before'은 아니다 지원. 나는 일종의 답이 아니오라고 생각한다. 이것에 대한 내장 된 해결책은 없다. 당신은 당신 자신의 논리를 작성해야 할 것입니다. 아마도 어떤 종류의'CssApplier' 일 것입니다. 카운터가 태그를 통해 증가 할 수 있도록 상태 정보를 유지하는 방법을 찾아야 할 수도 있습니다. 현재 구현 된 CSS 속성은 모두 stateless이며 '굵은 글꼴'은 항상 '굵은 글꼴'이라고 생각하지만 이전에 1이면 'counter'는 2입니다. iTextSharp가 수행하는 작업을 살펴보고 소스 코드를 해독 할 것입니다. –