2011-06-22 6 views
6

Używam ostatniej wersji itextsharp.itextsharp: jak wyświetlić dolny wiersz tabeli z właściwością HeaderRows = 1, jeśli krawędź u dołu wiersza nie jest ustawiona?

Używam właściwości HeaderRows = 1, więc jeśli nastąpi rozbicie strony, wiersze nagłówka pojawią się ponownie na następnej stronie.

Następnie mamy wiersze treści ze stylem granicznym bez wzgledu tak:

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

Gdy istnieje Podział strony, dolny wiersz tabeli nie pokazano, co nie jest logiczne. Nawet jeśli wiersze zawartości nie mają dolnej/górnej granicy, samo PdfPTable powinno mieć ramkę (w rzeczywistości nie ma jej w kodzie).

Wszelkie pomysły? Dzięki.

Odpowiedz

5

Myślę, że miałem szczęście, nie było to łatwe do znalezienia.

Szukałem jakiegoś zdarzenia, aby zlokalizować ostatni wiersz strony i znalazłem go.

Ty instancja to tak:

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

Klasa jest następujący:

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 
} 
Powiązane problemy