Soy capaz de crear varias filas si contienen el mismo número de columnas:

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

Esto funciona bien me da dos filas, cada una con tres columnas.

iTextSharp Uso Colspan con PdfPRow

Sin embargo, si quiero que la primera fila sólo tienen una larga columna con Colspan desaparece:

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

iTextSharp Uso Colspan con PdfPRow

No hay ningún error, dado que, simplemente, no se representa.

Además, soy consciente de la tabla.AddCell que inicia automáticamente una nueva fila cuando la columna de la tabla se alcanza el límite de la fila actual. Sin embargo, quiero usar PdfPRow si es posible.

Cualquier ayuda sería muy apreciada.

InformationsquelleAutor Baxter | 2013-11-08

2 Comentarios

  1. 16

    Parece que he leído la documentación que no está avalado por el original iText desarrollador (se me). ¿Puedo preguntarle para la URL donde has encontrado esa documentación, por lo que puedo pedir un cese y desista?

    Como la respuesta a su pregunta: por favor, eche un vistazo a la documentación oficial, y usted encontrará la MyFirstTable ejemplo. Basándose en este ejemplo, usted puede adaptar su propio código como sigue:

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

    Como se puede ver, no hay ninguna razón para utilizar la PdfPRow clase. El PdfPRow clase se utiliza internamente por iText, pero como se ha documentado en mi libro, los desarrolladores el uso de iText no debería usar esa clase en su código.

    • Gracias por su rápida respuesta. Voy a cambiar mi código para el uso de AddCell() y automáticamente empezar la siguiente fila cuando el colspan es alcanzado. Voy a poner un comentario entre cada «fila» para mejorar la legibilidad. Yo estaba explorando los métodos públicos de la iTextSharp.texto.pdf; espacio de nombres y encontró PdfPRow a lo largo del lado PdfPTable y PdfPCell. Además, hay varios ejemplos de su uso de este sitio: stackoverflow.com/questions/4043848/… y un par en algunos sitios externos: jexp.ru/index.php/Java_Tutorial/PDF/Table_Row Gracias de nuevo!
    • Lowagie: No es de extrañar que la mayoría de los ejemplos de la tabla.AddCell lugar de la tabla.Las filas.Agregar(somePdfPRow objeto). Todavía creo que es más natural para crear células, añadir a estas células a una fila y, a continuación, agregar la fila a la tabla.Las filas. Utilizando la tabla.AddCell sólo hace muy difícil rastrear donde he añadido un extra celular o donde me perdí un celular, porque va a ciegas agregar celdas a la mesa y comenzar una nueva fila cuando el número de columnas definidas ha agotado en una sola fila. ¿Estás de acuerdo?
    • Personalmente, creo que es más fácil dejar que iText de manejar toda la fila cosas, pero eso es un asunto de opinión. Hay pros y contras para ambos enfoques.
  2. 2

    Aunque yo recomiendo usar el código como por la documentación oficial como se recomendó anteriormente por el Autor original (Gracias señor !!!), hay una manera de resolver el problema:

        public static void TestFunction()
    {
    string[] cells = new string[] { "C1", "C2", "C3", "C6" };
    float[] columnWidths = new float[] { 25f, 25f, 25f, 25f, 25f, 25f };
    int[] colSpans = new int[] { 1, 1, 3, 1 };
    PdfPTable pdfPTable = new PdfPTable(columnWidths);
    var row = CreatePdfRow(cells, colSpans);
    pdfPTable.Rows.Add(row);
    }
    public static PdfPRow CreatePdfRow(string[] cells, int[] colSpans = null)
    {
    //parameter values passed for cells and colSpans:
    //string[] cells = new string[]{ "C1", "C2", "C3", "C6"};
    //int[] colSpans = new int[] { 1,1,3,1};
    if (cells == null || cells.Length <= 0)
    return new PdfPRow(new PdfPCell[] { new PdfPCell(new Phrase("")) });
    List<PdfPCell> Cells = new List<PdfPCell>();
    for (var i = 0; i < cells.Length; i++)
    {
    var pdfPCell = new PdfPCell(new Phrase(cells[i] ?? ""));
    if (colSpans != null && colSpans.Length > i)
    pdfPCell.Colspan = colSpans[i];
    Cells.Add(pdfPCell);
    //For cells with ColSpan > 1, add null cells to fill up the empty spots
    if (colSpans != null && colSpans.Length > i && colSpans[i] > 1)
    {
    for (var j = 1; j < colSpans[i]; j++)
    {
    Cells.Add(null);
    }
    }
    }
    PdfPRow row = new PdfPRow(Cells.ToArray());
    return row;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here