2011-06-22 12 views
6

Tôi sử dụng phiên bản mới nhất của itextsharp.itextsharp: làm thế nào để hiển thị dòng dưới cùng của một bảng với thuộc tính HeaderRows = 1 nếu dưới cùng biên giới của hàng không được thiết lập?

Tôi sử dụng thuộc tính HeaderRows = 1 để nếu có lỗi trang, các hàng Tiêu đề sẽ xuất hiện lại ở trang tiếp theo.

Sau đó, chúng tôi có các hàng của nội dung với phong cách biên giới mà không bottomline như thế này:

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

Khi có một pagebreak, dòng dưới cùng của bảng không được hiển thị, mà không phải là logic. Ngay cả khi các hàng nội dung không có đường viền dưới cùng/trên cùng, chính PdfPTable sẽ có đường viền (nó không có trong mã thực tế).

Bất kỳ ý tưởng nào? Cám ơn.

Trả lời

5

Tôi nghĩ mình đã may mắn, điều này không dễ tìm.

Tôi đang tìm kiếm một số sự kiện để bản địa hóa hàng cuối cùng của trang và tôi đã tìm thấy nó.

Bạn dụ nó như thế này:

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

Lớp như sau:

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 
} 
Các vấn đề liên quan