2016-10-04 11 views
0

TOC에 대한 질문이 있습니다. 들여 쓰기와 숫자를 사용하여 TOC를 만들려면 어떻게해야합니까?Table of Content (itextsharp)에서 들여 쓰기 및 숫자 생성

이제 TOC (목록 만)가 있습니다. ChunkParagraph을 사용하여 만듭니다. TOC를 만들 때 무엇을 사용해야합니까? 어쩌면 List을 사용해야하고 문서에 추가 할 것인가?

여기에 내가 만드는거야 TOC :

private int CreateTOC(XmlNode xmlNode, Document doc, PdfWriter writer, int number) 
    { 
     var toc = ev.GetTOC(); 
     KeyValuePair<string, int> value; 

     Chunk dottedLine = new Chunk(new iTextSharp.text.pdf.draw.DottedLineSeparator()); 

     for (int i = 0; i < xmlNode.ChildNodes.Count; i++) 
     { 
      var text = xmlNode.ChildNodes[i].Attributes["text"].Value; 
      value = toc[text]; 
      var dest = value.Key; 
      var page = value.Value; 

      var c = new Chunk((i+1).ToString()+ ". " + text, font); 
      c.SetAction(PdfAction.GotoLocalPage(dest, false)); 

      var p = new Paragraph(c); 
      p.Add(dottedLine); 

      c = new Chunk(page.ToString(), font); 
      c.SetAction(PdfAction.GotoLocalPage(dest, false)); 
      p.Add(c); 
      doc.Add(p); 


      CreateTOC(xmlNode.ChildNodes[i], doc, writer, i+1); 
     } 
     return writer.PageNumber; 
    } 

그리고 내용의 장을 참조하여 목록을 가져옵니다.

1. chapter1-------------------1page 
    1.1 subchupter1-------------2page 
    1.2 subchupter2-------------2page 
    1.3 subchupter3-------------3page 
2. chupter2-------------------4page 
    2.1 subchupter4-------------4page 
    2.3 subchupter4-------------4page 
    2.3.1 subsubchupter------5page 
    ... 
    ... 
    ... 

내가 그것을 어떻게 해결할 수 : 는하지만 다음과 같은해야합니까?

감사합니다.

+0

들여 쓰기를 만들기 위해 단락에서'setIndentationLeft()'를 사용하지 않는 이유는 무엇입니까? (또는 iTextSharp를 사용하는 경우 'IndentationLeft' 속성, http://stackoverflow.com/questions/29599797 참조) –

답변

2

레벨을 소개하고 들여 쓰기 값으로 해당 레벨을 곱하십시오. IndentationLeft의 값으로 그 값을 사용

private int CreateTOC(XmlNode xmlNode, Document doc, PdfWriter writer, int number, int level) { 
    var toc = ev.GetTOC(); 
    KeyValuePair<string, int> value; 

    Chunk dottedLine = new Chunk(new iTextSharp.text.pdf.draw.DottedLineSeparator()); 

    for (int i = 0; i < xmlNode.ChildNodes.Count; i++) 
    { 
     var text = xmlNode.ChildNodes[i].Attributes["text"].Value; 
     value = toc[text]; 
     var dest = value.Key; 
     var page = value.Value; 

     var c = new Chunk((i+1).ToString()+ ". " + text, font); 
     c.SetAction(PdfAction.GotoLocalPage(dest, false)); 

     var p = new Paragraph(c); 
     p.IndentationLeft = 10 * level; 
     p.Add(dottedLine); 

     c = new Chunk(page.ToString(), font); 
     c.SetAction(PdfAction.GotoLocalPage(dest, false)); 
     p.Add(c); 
     doc.Add(p); 


     CreateTOC(xmlNode.ChildNodes[i], doc, writer, i+1, level + 1); 
    } 
    return writer.PageNumber; 
} 

level에 대한 사용 0 먼저 CreateToc()를 호출 할 때.

+0

와우. 대단 하네! > 왜 당신이 사용하지 ... 나는 찾지 못했습니다. 고맙습니다! – Naomiss