PdfTable: последняя ячейка не видна

Я использую PdfPTable следующим образом

var myTable = new PdfPTable( 3 );

foreach(var nextString in myStrings)
{

var nextCell = new PdfPCell( new Phrase( nextString, smallFont ) );
nextCell.Border = Rectangle.NO_BORDER;
nextCell.AddCell(nextCell);
}

pdfDocument.Add(myTable);

Все идеально, тогда общее количество ячеек умножается на количество столбцов (3). Но когда я хотел создать таблицу с 3 столбцами, но с 4 ячейками - последняя строка не видна.

Как решить такую ​​проблему?

itextsharp 5.3.3.0

3 ответа

Решение

Чтобы решить эту проблему и другие, я рекомендую использовать PdfPTable метод CompleteRow(),

Это гарантирует, что для любых незавершенных строк будут добавлены дополнительные ячейки, чтобы они были полными и отображались в сгенерированном PDF.

Как правило, неполная строка будет логической ошибкой при использовании CompleteRow() Вы можете легко определить, где вы сделали эти ошибки, и исправить их.

С точки зрения вашего примера:

var myTable = new PdfPTable( 3 );

foreach(var nextString in myStrings)
{
    var nextCell = new PdfPCell( new Phrase( nextString, smallFont ) );
    nextCell.Border = Rectangle.NO_BORDER;
    nextCell.AddCell(nextCell);
}

myTable.CompleteRow();

pdfDocument.Add(myTable);

Вы можете либо заполнить последний ряд до его заполнения, либо установить ColumnSpan занять пустое место.

Последняя строка не видна, поскольку последняя строка не завершена. В вашем случае с 3 столбцами и 4 ячейками, вам нужно добавить еще 2 пустых ячейки, чтобы завершить последний ряд.

CompleteRow() метод сделает вещь. Это добавляет пустую ячейку в конце вашего PDF, но вы заметите, что она отображает пустую ячейку с рамкой. Итак, чтобы избежать такого поведения, вам придется установить DefaultCell.Border = Rectangle.NO_BORDER перед вызовом CompleteRow() метод.

var myTable = new PdfPTable( 3 );

foreach(var nextString in myStrings)
{

    var nextCell = new PdfPCell( new Phrase( nextString, smallFont ) );
    nextCell.Border = Rectangle.NO_BORDER;
    nextCell.AddCell(nextCell);
}
myTable.DefaultCell.Border = Rectangle.NO_BORDER;
myTable.CompleteRow();

pdfDocument.Add(myTable);
Другие вопросы по тегам