2011-06-22 30 views
6

Uso la última versión de itextsharp.itextsharp: cómo mostrar la línea inferior de una tabla con la propiedad HeaderRows = 1 si el borde inferior de la fila no está configurado?

Uso la propiedad HeaderRows = 1 para que si hay un salto de página, las filas del encabezado aparecerán nuevamente en la página siguiente.

entonces tenemos las filas de los contenidos con el estilo de borde y sin línea de fondo como esto:

PdfPCell cell1 = null; 
cell1 = new PdfPCell(new Phrase(string.Format("{0}", c1), fn)); 
cell1.Border = Rectangle.RIGHT_BORDER | Rectangle.LEFT_BORDER; 

Cuando hay un salto de página, no se muestra la parte inferior de la línea de la tabla, lo que no es lógico. Incluso si las filas de contenido no tienen borde inferior/superior, la propia PdfPTable debería tener bordes (de hecho, no tiene el código).

¿Alguna idea? Gracias.

Respuesta

5

Creo que he tenido suerte, esto no fue fácil de encontrar.

Estaba buscando algún evento para localizar la última fila de la página y lo encontré.

Usted instancia de esta manera:

PdfPTable ItemTable = new PdfPTable(7); 
    ItemTable.TableEvent = new LineaBottom(); 

La clase es la siguiente:

public class LineaBottom : IPdfPTableEvent 
{ 


    #region IPdfPTableEvent Members 

    void IPdfPTableEvent.TableLayout(PdfPTable table, float[][] widths, float[] heights, int headerRows, int rowStart, PdfContentByte[] canvases) 
    { 
     int columns; 
     Rectangle rect; 
     int footer = widths.Length - table.FooterRows; 
     int header = table.HeaderRows - table.FooterRows + 1; 
     int ultima = footer - 1; 
     if (ultima != -1) 
     { 
      columns = widths[ultima].Length - 1; 
      rect = new Rectangle(widths[ultima][0], heights[ultima], widths[footer - 1][columns], heights[ultima + 1]); 
      rect.BorderColor = BaseColor.BLACK; 
      rect.BorderWidth = 1; 
      rect.Border = Rectangle.TOP_BORDER; 
      canvases[PdfPTable.BASECANVAS].Rectangle(rect); 
     } 
    } 

    #endregion 
} 
Cuestiones relacionadas