使用foreach将单元格垂直添加到表中

时间:2018-11-08 10:28:44

标签: c# asp.net itext

当我将一个单元格添加到表中时,它会添加到下一列。

是否可以先添加行或更灵活地添加值?我是一个初学者,所以对此我不太了解。

这是我的代码:

Document document = new Document(PageSize.A3, 50, 50, 25, 25);
MemoryStream PDFData = new MemoryStream();
PdfWriter PDFWriter = PdfWriter.GetInstance(document, PDFData);
document.Open();

PdfPTable table = new PdfPTable(testTimes);
table.DefaultCell.Border = 1;
table.HorizontalAlignment = 0;

table.WidthPercentage = 100f;

foreach (Test test in tests)
{
    switch (test.type)
    {
        case 3:
            //new Column (fail)
            PdfPCell type = new PdfPCell(new Phrase(TestType.Aimatologikes.ToString()));
            table.AddCell(type);

            PdfPCell data = new PdfPCell(new Phrase("values"));
            foreach (TestData testdata in test.TestDatas)
            {
                //Rows
                table.AddCell(data);
            }

            break;
    }
}

document.Add(table);
document.Close();

这是结果:

enter image description here

我想在第二个foreach下面分开列。这可能吗?

1 个答案:

答案 0 :(得分:1)

两个建议:

  • 首先,更新您的代码以使用iText 7(如果可能)。如果您要开始一个新项目,则可以使用最新版本的API
  • 其次,(由@mkl建议)编写一个中间数据结构,该结构将作为对Table对象的逻辑视图

请允许我解释。
我们将此中介对象称为EasyTable。

EasyTable需要做一些事情:

  • 允许您在给定坐标处设置特定的PdfObject
  • 在给定坐标处更改PdfObject
  • 计算行数
  • 计算列数
  • 提供一种便捷的方法来逐行获取所有单元格(包括可能的空白)

为此,您可以轻松实现EasyTable以使用Map。这样,您可以将Point对象映射到PdfObject。您可以通过遍历所有键并找到最大Y值来计算行数。列数类似。