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