itextsharp: как показать нижнюю строку таблицы со свойством HeaderRows = 1, если не задана граница нижней части строки? - PullRequest
6 голосов
/ 22 июня 2011

Я использую последнюю версию itextsharp.

Я использую свойство HeaderRows = 1, чтобы в случае разрыва страницы строки заголовка снова появлялись на следующей странице.

Тогда у нас есть строки содержимого со стилем границы без нижней линии, например:

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

При разрыве страницы строка внизу таблицы не отображается, что не логично. Даже если строки содержимого не имеют нижней / верхней границы, сама таблица PdfPTable должна иметь границы (на самом деле ее нет в коде).

Есть идеи? Thx.

1 Ответ

5 голосов
/ 22 июня 2011

Я думаю, что мне повезло, найти это было нелегко.

Я искал какое-то событие для локализации последней строки страницы и нашел его.

Вы видите это так:

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

Класс следующий:

 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
}
...