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);