2016-10-04 19 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; 
} 

使用0あなたが最初CreateToc()を呼び出すlevelため。

+0

うわー。それは素晴らしい! >なぜあなたは使っていないのですか?私は見つかりませんでした。ありがとうございました! – Naomiss

関連する問題