Почему 2-й ряд таблицы не будет записан?

Я пытаюсь создать таблицу без границ с 4 столбцами и 2 строками поверх моего документа PDF. Проблема в том, что 2-й ряд не будет написан. Это мой код:

float[] columnWidths = { 2, 1, 1, 1};
PdfPTable table = new PdfPTable(columnWidths);
table.WidthPercentage = 100;
if (...) //true
{
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("AAA:_______________",infoFont));    
                p.BorderWidth = 0;  
                table.AddCell(p);  // fixed pos. 1st col,1st row
       }
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("BBB:_____", infoFont));   
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 2nd col,1st row
       }
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("CCC:_____", infoFont));    
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 3rd col,1st row
       }
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("DDD:_____", infoFont));      
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 4th col,1st row
       }
}
if (...) //true
{
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("EEE: " + eee));
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 1st col,2nd row
       }
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("FFF: " + fff));
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 2nd col,2nd row
       }
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("GGG: " + ggg));
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 3rd col,2nd row
       }
       if (...) //true
       {
                PdfPCell p = new PdfPCell(new Phrase("HHH:___________________"));
                p.BorderWidth = 0;
                table.AddCell(p);   // fixed pos. 4th col,2nd row
       }
}

document.Add(table);

Как я могу справиться с этим? И второй вопрос: могу ли я иметь фиксированную позицию для каждого условия if (проверьте комментарии в коде), поэтому, если одно условие if в первой строке неверно, тогда эта ячейка должна быть пустой?

1 ответ

Решение

Я предполагаю, что вы упростили свой код до такой степени, что фрагмент, которым вы делитесь, больше не соответствует вашему собственному коду. Вы создаете таблицу с 4 столбцами. Если вы добавите 4 ячейки, будет отображен один ряд. Если вы добавите 8 ячеек, будут отображены две строки. Однако: если вы добавите только 7 ячеек, то будет добавлена ​​одна строка. 3 ячейки в неполной строке будут опущены, поскольку iText отображает только полные строки.

См. Также Как сгенерировать pdf, если наш столбец меньше объявленного столбца таблицы и ItextSharp, количество ячеек не делится на длину строки и нечетная ячейка не добавлена ​​в Pdf и PdfTable: последняя ячейка не видна и...

Это объясняет, почему второй ряд не отображается. Добавьте следующую строку, чтобы увидеть, решит ли это проблему:

table.CompleteRow();

Что касается вашего другого вопроса: вы всегда можете добавить пустую ячейку следующим образом:

PdfPCell cell = new PdfPCell();
if (someCondition) {
    cell.addElement(new Paragraph("AAA"));
} 
table.addCell(cell);

Наконец, есть еще одна ошибка в вашем коде. Это не имеет никакого смысла:

p.BorderWidth = 0;

Ширина границы 0 не означает, что граница не будет показана. Как объяснялось много раз, прежде чем ISO-32000-1 определяет линию с шириной 0 как линию, ширина которой равна минимальной ширине, которая может отображаться устройством. Если вы не хотите использовать границы:

p.Border = PdfPCell.NO_BORDER;

Наконец, я должен попросить вас об одолжении: мы изменили дизайн веб-сайта iText и выпустили его на День Благодарения. Теперь мы замечаем, что мы не получаем столько посещений, сколько раньше, до изменений. Учитывая тот факт, что всю необходимую вам информацию можно найти в онлайн-документации, а также тот факт, что вам все еще нужно было задать вопрос, мы хотели бы знать, что не так с веб-сайтом. Есть ли что-то, что мы можем сделать, чтобы улучшить контент? В чем может быть причина, по которой люди отвлекаются от нашего сайта? Почему вы задаете так много вопросов, на которые уже даны ответы в официальной документации? У нас сейчас слишком много контента?

Другие вопросы по тегам