在.NET表的iText 7中创建和显示数据

时间:2018-07-17 18:07:11

标签: c# pdf itext7

它应该足够简单:

public void WritePartsPdf(Document doc)
{
    Table table = new Table(2, true);

    foreach (var part in PartsList)
    {
        Paragraph name = new Paragraph(part.PartName);
        Paragraph length = new Paragraph(part.Length.ToString());

        var cell = new Cell().Add(name);
        var cell2 = new Cell().Add(length);
        cell.Add(cell2);

        table.AddCell(cell);
    }
    doc.Add(table);
}

但是,我的段落在所有单元格中都是重复的,因此我需要在这里显而易见的是,一列表示名称,另一列表示长度。这是我到目前为止所得到的:

enter image description here

请帮助!

1 个答案:

答案 0 :(得分:1)

因此,“问题”是设置表格比我最初想象的还要简单。我们不需要嵌套单元格,因为我已经设置了列数,只需要在另一个单元格之后再添加一个就可以了:

public void WritePartsPdf(Document doc)
{
    Table table = new Table(2, true);
    foreach (var part in PartsList)
    {
        var name = new Paragraph(part.PartName);
        var length = new Paragraph(part.Length.ToString());
        var column1 = new Cell().Add(name);
        var column2 = new Cell().Add(length);
        table.AddCell(column1);
        table.AddCell(column2);
    }
    doc.Add(table);
}

必须在这里仔细研究一下代码以获取想法:https://developers.itextpdf.com/content/itext-7-jump-start-tutorial-net/chapter-3-using-renderers-and-event-handlers

****更新****

它变得更加容易。我在弄乱它,发现Paragraph扩展了BlockElement<T>,所以我们根本不需要像元对象将像元添加到表中:

private void WriteListToPdf(Document doc)
{
    Table table = new Table(2, true);

    foreach (var item in myList)
    {
        table.AddCell(new Paragraph(item.Foo));
        table.AddCell(new Paragraph(item.Bar));
    }
    doc.Add(table);
}

幸运的是,tableAddCell的{​​{1}}过载;)

如果单个单元格中需要多行,您仍然需要单元格对象。只需将一堆段落添加到单元格中,然后然后将单元格添加到表中即可。