Почему iText не добавляет в документ таблицы, расположенные ближе к нижней части страницы?

#java #c# #pdf #itext

#java #c# #PDF #itext

Вопрос:

У меня много маленьких таблиц, которые я инкапсулирую в таблицу с округлением 1×1 и устанавливаю для атрибута 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:

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

 table.setKeepTogether(true)
document.add(table)
  

Комментарии:

1. Пожалуйста, примите свой собственный ответ. Это удалит вопрос из списка неотвеченных. Спасибо.