Rowspan или вложенный?Создать таблицу itextsharp - PullRequest
0 голосов
/ 06 октября 2010

Я искал, как объединить две ячейки, и я нашел два ответа 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 ]

3 голосов
/ 06 октября 2010

Есть несколько способов сделать то, что вы хотите сделать. Поскольку структура вашей таблицы не слишком сложна, возможно, самый простой подход - это создать вашу 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 - Представляем таблицы

2 голосов
/ 09 ноября 2012

Роберт (ниже) прав!Rowspan не поддерживается в последних версиях iTextSharp.Поддерживается только colspan.В приведенном выше URL-адресе указано, что он поддерживается начиная с версии 2.1.6, но похоже, что он не обновлялся в течение некоторого времени, поскольку в новых версиях (выше версии 5) и вПараметр свойства RowSpan просто игнорируется.

Вам лучше добавить пустые ячейки для ячеек с разметкой строк.

0 голосов
/ 01 декабря 2011

Rowspan не является ответом, потому что в iTextSharp нет ряда строк. Вы должны использовать вложенные таблицы.

Возможен Colspan, но нет строки.

Для вашей таблицы я бы использовал только один colspan и пустые ячейки между заголовком 1 и D1

...