Rowspan还是嵌套?创建一个表itextsharp

时间:2010-10-06 11:45:22

标签: formatting nested itext html-table

我一直在寻找如何合并两个单元格,我发现了Rowspan和Nested两个答案。我不能用这两个函数创建我的表,因为我不知道如何在开始和结束时合并单元格。我一直在尝试很多方法,但这让我发疯。

我要制作的表有9列3行。所以,我希望表格看起来像:

| Header 1 | Header 2 |       Header 3         | Header 4 | Header 5 |  
|          |          | H1 | H2 | H3 | H4 | H5 |          |          |  
|    D1    |    D2    | D3 | D4 | D5 | D6 | D7 |    D8    |    D9    |

Header 1: cs=1, rs=2.
Header 2: cs=1, rs=2.
Header 3: cs=5, rs=1.
      H1: cs=1, rs=1.
      H2: cs=1, rs=1.
      H3: cs=1, rs=1.
      H4: cs=1, rs=1.
      H5: cs=1, rs=1.
Header 4: cs=1, rs=2.
Header 5: cs=1, rs=2.

cs:colspan,rs:rowspan。

标题3包含H1,H2,H3,H4,H5。

我认为解决方案非常简单,但我找不到它。我希望你能理解哪个问题是因为我还无法上传图片。

3 个答案:

答案 0 :(得分:3)

有几种方法可以做你想做的事。由于您的表结构不是太复杂,也许最简单的方法是使用九列创建PdfPTable,并在创建行时使用每个单元格的Rowspan和Colspan属性一次添加一个单元格。

下面的代码将创建一个与您描述的完全相同的表格:

    private void CreatePdf() {
        using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create)) {

            Document doc = new Document(new iTextSharp.text.Rectangle(800f, 800f));
            PdfWriter.GetInstance(doc, fs);
            doc.Open();

            PdfPTable table = new PdfPTable(9);

            // Hdeaer row.
            table.AddCell(GetCell("Header 1", 1, 2));
            table.AddCell(GetCell("Header 2", 1, 2));
            table.AddCell(GetCell("Header 3", 5, 1));
            table.AddCell(GetCell("Header 4", 1, 2));
            table.AddCell(GetCell("Header 5", 1, 2));

            // Inner middle row.
            table.AddCell(GetCell("H1"));
            table.AddCell(GetCell("H2"));
            table.AddCell(GetCell("H3"));
            table.AddCell(GetCell("H4"));
            table.AddCell(GetCell("H5"));

            // Bottom row.
            table.AddCell(GetCell("D1"));
            table.AddCell(GetCell("D2"));
            table.AddCell(GetCell("D3"));
            table.AddCell(GetCell("D4"));
            table.AddCell(GetCell("D5"));
            table.AddCell(GetCell("D6"));
            table.AddCell(GetCell("D7"));
            table.AddCell(GetCell("D8"));
            table.AddCell(GetCell("D9"));

            doc.Add(table);
            doc.Close();
        }
    }
    private PdfPCell GetCell(string text) {
        return GetCell(text, 1, 1);
    }
    private PdfPCell GetCell(string text, int colSpan, int rowSpan ) {
        PdfPCell cell = new PdfPCell(new Phrase(text));
        cell.HorizontalAlignment = 1;
        cell.Rowspan = rowSpan;
        cell.Colspan = colSpan;

        return cell;
    }

正如您所看到的,我已经在帮助方法中包装了PdfPCells的构造,允许您设置每个单元格的文本内容以及Rowspan和Colspan属性。

如果您还没有这样做,我建议您查看iTextSharp表格中的本教程:

iTextSharp - Introducing Tables

答案 1 :(得分:2)

罗伯特(下)是对的!最新版本的iTextSharp不支持Rowspan。只支持colspan。上面提供的URL确实表明它自v 2.1.6以来一直受支持,但看起来好像有一段时间没有更新,因为在任何新版本(v5以上)中没有更多的setRowSpan()方法RowSpan属性设置只是被忽略。

最好为排成行的单元格添加空单元格。

答案 2 :(得分:0)

Rowspan不是答案,因为iTextSharp中没有rowspan。您必须使用嵌套表。

Colspan是可行的,但不是rowpan。

对于你的表,我只会使用一个colspan并在Header 1和D1之间使用空单元