Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在目录(itextsharp)中创建缩进和计数_C#_Pdf_Text_Itext_Tableofcontents - Fatal编程技术网

C# 在目录(itextsharp)中创建缩进和计数

C# 在目录(itextsharp)中创建缩进和计数,c#,pdf,text,itext,tableofcontents,C#,Pdf,Text,Itext,Tableofcontents,我有一个关于TOC的问题。如何创建带有缩进和计数的TOC 现在我有了没有它的TOC(只是列表)。我使用Chunk和段落创建它。我应该使用什么来创建TOC?也许我应该使用列表并添加到文档中还是不添加 我在这里创建TOC: private int CreateTOC(XmlNode xmlNode, Document doc, PdfWriter writer, int number) { var toc = ev.GetTOC(); KeyValuePair

我有一个关于TOC的问题。如何创建带有缩进和计数的TOC

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

我在这里创建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;
    }
我怎样才能修好它


谢谢大家!

引入一个级别并将该级别与缩进值相乘。将该值用作缩进左侧的值:

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;
}
private int CreateTOC(XmlNode XmlNode,文档文档,PdfWriter writer,int编号,int级别){
var toc=ev.GetTOC();
键值对值;
Chunk dottedLine=新块(new iTextSharp.text.pdf.draw.DottedLineSeparator());
对于(int i=0;i

第一次调用
CreateToc()
时,对
级别使用
0
,引入一个级别并将该级别与缩进值相乘。将该值用作缩进左侧的值:

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;
}
private int CreateTOC(XmlNode XmlNode,文档文档,PdfWriter writer,int编号,int级别){
var toc=ev.GetTOC();
键值对值;
Chunk dottedLine=新块(new iTextSharp.text.pdf.draw.DottedLineSeparator());
对于(int i=0;i

第一次调用
CreateToc()

时,对
级别使用
0
,为什么不在段落上使用
setIndentationLeft()
来创建缩进?(如果您使用的是iTextSharp,请参见
setIndentationLeft
属性)为什么不在段落上使用
setIndentationLeft()
来创建缩进?(如果您使用的是iTextSharp,请参见
IndentationLeft
属性)哇。太棒了!>你为什么不使用。。。我没有找到。非常感谢。哇!太棒了!>你为什么不使用。。。我没有找到。非常感谢。