2013-11-08 3 views
1

Я могу создать несколько строк, если они содержат одинаковое количество столбцов:iTextSharp - Использование Colspan с PdfPRow

table = new PdfPTable(3); 

var firstRowCell1 = new PdfPCell(new Phrase ("Row 1 - Column 1")); 
var firstRowCell2 = new PdfPCell(new Phrase ("Row 2 - Column 2")); 
var firstRowCell3 = new PdfPCell(new Phrase ("Row 3 - Column 3")); 
PdfPCell[] row1Cells = { firstRowCell1, firstLineRow2, firstRowCell3 }; 
var row1 = new PdfPRow(row1Cells); 
table.Rows.Add(row1); 

var nextRowCell1 = new PdfPCell(new Phrase ("Row 2 - Column 1")); 
var nextRowCell2 = new PdfPCell(new Phrase ("Row 2 - Column 2")); 
var nextRowCell3 = new PdfPCell(new Phrase ("Row 2 - Column 3")); 
PdfPCell[] row2Cells = { nextRowCell1, nextRowCell2, nextRowCell3 }; 
var row2 = new PdfPRow(row2Cells); 
table.Rows.Add(row2); 

Это работает отлично дает мне две строки каждой из трех колонок.

enter image description here

Однако, если я хочу, чтобы первый ряд, чтобы просто иметь один длинный столбец с помощью Colspan исчезает:

var table = new PdfPTable(3); 

var firstRowCell1 = new PdfPCell(new Phrase("Row 1 - Column 1")); 
firstRowCell1.Colspan = 3; 
PdfPCell[] row1Cells = { firstRowCell1 }; 
var row1 = new PdfPRow(row1Cells); 
deptHeaderTable.Rows.Add(row1); 

var nextRowCell1 = new PdfPCell(new Phrase("Row 2 - Column 1")); 
var nextRowCell2 = new PdfPCell(new Phrase("Row 2 - Column 2")); 
var nextRowCell3 = new PdfPCell(new Phrase("Row 2 - Column 3")); 
PdfPCell[] row2Cells = { nextRowCell1, nextRowCell2, nextRowCell3 }; 
var row2 = new PdfPRow(row2Cells); 
deptHeaderTable.Rows.Add(row2); 

enter image description here

Там нет ошибок, учитывая его просто не делает ,

Кроме того, мне известно о table.AddCell, который автоматически запускает новую строку, когда предел столбца таблицы достигнут для текущей строки. Тем не менее, я хочу использовать PdfPRow, если это вообще возможно.

Любая помощь была бы принята с благодарностью.

ответ

12

Похоже, вы прочитали документацию, которая не поддерживается оригинальным разработчиком iText (будучи мной). Могу ли я спросить вас о URL-адресе, где вы нашли эту документацию, чтобы я мог попросить прекратить и воздержаться?

Что касается ответа на ваш вопрос, пожалуйста, взгляните на the official documentation, и вы найдете пример MyFirstTable. На основании этого примера, вы можете адаптировать свой собственный код следующим образом:

var table = new PdfPTable(3); 
var cell = new PdfPCell(new Phrase("Cell with colspan 3")); 
cell.Colspan = 3; 
table.AddCell(cell); 
table.AddCell("row 2; cell 1"); 
table.AddCell("row 2; cell 2"); 
table.AddCell("row 2; cell 3"); 

Как вы можете видеть, что нет никаких причин, чтобы использовать PdfPRow класс. Класс PdfPRow используется внутри iText, но, как описано в моей книге, разработчики, использующие iText, не должны использовать этот класс в своем коде.

+0

Благодарим за быстрый ответ. Я переключу свой код на использование AddCell() и автоматически запустим следующую строку при достижении colspan. Я буду комментировать каждую «строку» для удобочитаемости. Я изучал общедоступные методы iTextSharp.text.pdf; пространство имен и найдено PdfPow вдоль стороны PdfPTable и PdfPCell. Кроме того, есть несколько примеров его использования на этом сайте: http://stackoverflow.com/questions/4043848/itextsharp-how-to-add-a-pdfprow-to-a-pdfptable и несколько на некоторых внешних сайтах: http://jexp.ru/index.php/Java_Tutorial/PDF/Table_Row Еще раз спасибо! – Baxter

+1

@Bruno Lowagie: Неудивительно, что в большинстве примеров есть таблица. AddCell вместо table.Rows.Add (объект somePdfPow). Я все еще думаю, что более естественно создавать ячейки, добавлять эти ячейки в строку и затем добавлять строку в таблицу. Использование table.AddCell только очень сложно отслеживать, где я добавил дополнительную ячейку или где я пропустил одну ячейку, потому что она будет слепо добавлять ячейки в таблицу и запускать новую строку, когда количество определенных столбцов исчерпано в один ряд. Вы согласны? – Stack0verflow

+0

Лично я считаю, что iText обрабатывает все строки, но это вопрос мнения. Есть плюсы и минусы для обоих подходов. –