2016-10-04 60 views
0

我有一個關於TOC的問題。我如何使用縮進和計數創建TOC?在內容列表(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; 
} 

使用0level當你第一次調用CreateToc()

+0

哇。這很棒! >你爲什麼不使用...我沒有找到。謝謝! – Naomiss