在 iText 7 for .NET 中创建和显示数据 Table

Creating and displaying data in iText 7 for .NET Table

应该很简单:

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);
}

但是我的段落在所有单元格中都是重复的,我需要在这里明显的是一列用于名称,另一列用于长度。这是我到目前为止得到的:

请帮忙!

所以,"problem" 是设置 table 比我最初想象的还要简单。我们不需要嵌套单元格,因为我已经设置了列计数,只需在另一个单元格之后添加一个单元格即可:

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>,所以我们根本不需要单元格对象来将单元格添加到 table:

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);
}

幸运的是 tableAddCellBlockElement<T> 有过载 ;)

如果您需要在单个单元格中包含多行,您仍然需要单元格对象。只需将一堆段落添加到单元格,然后 然后 将单元格添加到 table.