2014-07-14 3 views
0

HTML에서 생성 된 PDF의 정렬 된 목록 요소를 스타일 화해야합니다. 나는 이것이 내가 시도 방법으로 http://demo.itextsupport.com/xmlworker/itextdoc/CSS-conformance-list.htm 지원되지 않습니다 알고XMLWorkerHelper는 목록 스타일을 주문했습니다.

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을 추가 할 수있는 솔루션이 있습니까?

+0

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

답변

0

난 당신이 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++; 
      } 
     } 
관련 문제