Почему iText не добавляет таблицы, расположенные в нижней части страницы документа? - PullRequest
2 голосов
/ 20 октября 2011

У меня есть много маленьких таблиц, которые я инкапсулирую в сводную таблицу 1x1, и для атрибута SplitRows присваиваем значение false на сортирующую таблицу.Таким образом, я могу избежать раскола моей таблицы, когда она достигнет нижней части страницы.Когда я добираюсь до конца страницы, и там есть немного места для текста, но недостаточно для следующей таблицы, iText вообще не добавляет таблицу, но продолжает добавлять следующую таблицу в списке.

Если на текущей странице недостаточно места для таблицы, можно отправить ее на следующую страницу.Что я могу сделать?

http://compgroups.net/comp.text.pdf/Avoid-page-breaks-in-PdfPTable-using-iText-1.2

Это мой код:

public static void CreateMatrixProcentQuestionTable(ShowQuestionViewModel model, Document doc)
    {
        ShowMatrixQuestionViewModel sm = (ShowMatrixQuestionViewModel)model;

        Font fontsize = new Font(Font.FontFamily.HELVETICA, 9f);
        Font QuestionFont = new Font(Font.FontFamily.HELVETICA, 12f);

        PdfPTable table = new PdfPTable(sm.columns.Count + 2);

        // Tilføj spørgsmålet i en række for sig selv, ellers er der chance for at 
        // svarmulighederne ikke kommer med ved page breaks
        PdfPCell question = new PdfPCell(new Phrase(sm.Question_Wording + Environment.NewLine, QuestionFont));
        question.Border = Rectangle.NO_BORDER;
        question.Colspan = table.NumberOfColumns;
        table.AddCell(question);

        // Tilføj et mellemrum mellem spørgsmålet og svarmulighederne
        PdfPCell mellemrum = new PdfPCell(new Phrase(Environment.NewLine));
        mellemrum.Border = Rectangle.NO_BORDER;
        mellemrum.Colspan = table.NumberOfColumns;
        table.AddCell(mellemrum);

        // Tilføj rækker og kolonner 

        // Dette er den første tomme celle
        table.AddCell(new PdfPCell(new Phrase("", fontsize)));

        foreach (MatrixColumns column in sm.columns)
        {
            PdfPCell cell = new PdfPCell(new Phrase(column.Column_Description, fontsize));
            cell.HorizontalAlignment = 1;
            table.AddCell(cell);
        }

        PdfPCell ialt = new PdfPCell(new Phrase("I alt", fontsize));
        ialt.HorizontalAlignment = 1;
        table.AddCell(ialt);


        foreach (var pair in sm.columnrow)
        {
            MatrixRows row = pair.Key;

            PdfPCell rowcell = new PdfPCell(new Phrase(row.Row_Description == null ? "*" : row.Row_Description, fontsize));
            rowcell.HorizontalAlignment = 1;

            table.AddCell(rowcell);

            foreach (MatrixColumns column in pair.Value)
            {
                PdfPCell cell = new PdfPCell(new Phrase("%", fontsize));
                cell.HorizontalAlignment = Element.ALIGN_RIGHT;
                table.AddCell(cell);
            }

            PdfPCell sumcell = new PdfPCell(new Phrase("100%", fontsize));
            sumcell.HorizontalAlignment = Element.ALIGN_RIGHT;
            table.AddCell(sumcell);

        }

        // Man laver en 1x1 table uden om den rigtige table, og sætter 
        // SplitRows = False. Dette gør at tabellen ikke bliver knækket over 
        // ved page breaks

        PdfPTable sorroundingTable = new PdfPTable(1);
        PdfPCell innerTable = new PdfPCell(table);

        innerTable.Border = Rectangle.NO_BORDER;
        sorroundingTable.AddCell(innerTable);

        sorroundingTable.SplitRows = false;

        doc.Add(sorroundingTable);
        doc.Add(new Phrase(Environment.NewLine));
    }

1 Ответ

1 голос
/ 22 октября 2011

Это решает проблему:

table.setKeepTogether(true)
document.add(table)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...