【问题标题】:Create indents and numeration in Table of Content(itextsharp)在目录中创建缩进和编号(itextsharp)
【发布时间】:2017-02-12 11:52:26
【问题描述】:

我有一个关于 TOC 的问题。如何使用缩进和编号创建 TOC?

现在我有了没有它的 TOC(只是列表)。我使用ChunkParagraph 创建它。我应该用什么来创建 TOC?也许我应该使用List 并添加到文档中?

我在这里创建目录:

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
     ...
     ...
     ...

我该如何解决?

谢谢!

【问题讨论】:

  • 为什么不在段落上使用setIndentationLeft() 来创建缩进? (如果您使用的是 iTextSharp,则为 IndentationLeft 属性;请参阅 stackoverflow.com/questions/29599797

标签: c# pdf text itext tableofcontents


【解决方案1】:

引入一个级别并将该级别与缩进值相乘。将该值用作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;
}

当您第一次调用CreateToc() 时,使用0 作为level

【讨论】:

  • 哇。这很棒! >你为什么不使用...我没有找到。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2021-12-29
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
相关资源
最近更新 更多