Formatting 行跨度还是嵌套?创建一个表

Formatting 行跨度还是嵌套?创建一个表,formatting,nested,itext,html-table,Formatting,Nested,Itext,Html Table,我一直在搜索如何合并两个单元格,我找到了两个答案:Rowspan和Nested。我无法使用这两个函数生成表,因为我不知道如何在开始和结束时合并单元格。我已经尝试了很多方法,但这让我发疯 我要创建的表有9列3行。所以,我希望桌子看起来像: | Header 1 | Header 2 | Header 3 | Header 4 | Header 5 | | | | H1 | H2 | H3 | H4 | H5 |

我一直在搜索如何合并两个单元格,我找到了两个答案: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. |收割台1 |收割台2 |收割台3 |收割台4 |收割台5 | ||H1 | H2 | H3 | H4 | H5 | | |D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9| 标题1:cs=1,rs=2。 标题2:cs=1,rs=2。 标题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。 标题4:cs=1,rs=2。 标题5:cs=1,rs=2。 cs:colspan,rs:rowspan

标题3包含H1、H2、H3、H4、H5


我认为解决办法很简单,但我找不到。我希望您能理解问题所在,因为我还不能上传图像。

有几种方法可以完成您想要做的事情。由于表结构并不太复杂,最简单的方法可能是创建包含九列的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表上查看本教程:


有几种方法可以做你想做的事情。由于表结构并不太复杂,最简单的方法可能是创建包含九列的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表上查看本教程:


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

Colspan是可行的,但rowspan不是


对于您的表,我只使用一个colspan,并在标题1和D1之间使用空单元格。Rowspan不是答案,因为iTextSharp中没有Rowspan。您必须使用嵌套表

Colspan是可行的,但rowspan不是

对于您的表格,我只使用一个colspan,并在标题1和D1之间使用空单元格

罗伯特(下图)是对的!最新版本的iTextSharp不支持Rowspan。仅支持colspan。上面提供的URL确实声明它从V2.1.6开始就受到支持,但是看起来它已经有一段时间没有更新了,因为在任何新版本(v5以上)中都没有更多的setRowSpan()方法,并且RowSpan属性设置被忽略

最好为行范围的单元格添加一个空单元格。

罗伯特(下图)说得对!最新版本的iTextSharp不支持Rowspan。仅支持colspan。上面提供的URL确实声明它从V2.1.6开始就受到支持,但是看起来它已经有一段时间没有更新了,因为在任何新版本(v5以上)中都没有更多的setRowSpan()方法,并且RowSpan属性设置被忽略


您最好为行跨距单元格添加一个空单元格。

也许您可以尝试格式化您的问题(在编写文本时请参见代码图标),以便更好地布局表格。您的文本很难理解。也许您可以尝试格式化您的问题(在编写文本时请参阅代码图标),以便更好地布局表格。你的文字很难理解,“Rowspan不是答案”???Rowspan[自V 2.1.6以来一直受支持]()。请参阅API文档中的
setRowspan()
方法。或者查看
iTextSharp
源代码。“Rowspan不是答案”???Rowspan[自V 2.1.6以来一直受支持]()。请参阅API文档中的
setRowspan()
方法。或者查看
iTextSharp
源代码。