iTextSharp: нужна помощь, чтобы повторить некоторые столбцы в 1-й строке таблицы после разрыва страницы

Я создаю документ PDF с помощью iTextSharp. Документ представляет собой набор таблиц. Некоторые таблицы занимают несколько страниц.

Первый столбец - дата. Если несколько строк таблицы имеют одинаковую дату в 1-м столбце, только я вывожу дату только в первой строке, следующие строки имеют пустой столбец - до изменения даты.

Я делаю это, сохраняя значение последнего столбца в переменной и сравнивая его перед добавлением ячейки в новую строку.

Но если таблица не помещается на одной странице, я хочу повторить столбец даты в первой строке после разрыва страницы, чтобы пользователю не приходилось возвращаться на предыдущую страницу, чтобы увидеть дату.

У моей таблицы есть заголовок, и он отлично повторяется на новых страницах (я устанавливаю PdfPTable.HeaderRows).

Я попытался очистить свою переменную, которая хранит дату последней печати в onStartPage и onEndPage, но это не помогло.

В основном я хочу что-то вроде этого:

(начало таблицы)


=======================================================
  Date           Something related to the date        
======================================================= 
  01/01/2011     Something happened on January 1
                 Something else happened on this day
  01/05/2011     Here is another day
  01/07/2011     New day
                 Still 01/07/2011
                 Still there

(После разрыва страницы - таблица продолжается и дата повторяется в 1-й строке)

=======================================================
  Date           Something related to the date        
======================================================= 
  01/07/2011     It is still January 7th but the date 
                 column repeats as this is a new page
                 And still the 7th
  01/15/2011     New day now
  01/17/2011     And another day

Любая помощь будет оценена.

Спасибо


person Sergey    schedule 17.08.2011    source источник
comment
На самом деле это намного сложнее, чем кажется. Если вы отвечаете на PdfPCellEvent, значит, ячейка уже записана, и вы не можете это отменить. Лучший способ, который я могу придумать, - это вручную рассчитать высоту этой таблицы, выяснить, где таблица будет перенесена в зависимости от того, где она размещена на странице, и размера страницы, и заполнить пробелы по мере необходимости.   -  person Chris Haas    schedule 18.08.2011
comment
Спасибо, Крис. Я могу попробовать это. Можно ли будет также сделать это в PdfTableEvent и закрасить пустую ячейку?   -  person Sergey    schedule 18.08.2011
comment
Да, вы определенно должны быть в состоянии сделать это.   -  person Chris Haas    schedule 18.08.2011


Ответы (1)


Сначала рассмотрите возможность группировки списка по дате, прежде чем добавлять его в PdfTable. Этого можно легко добиться с помощью LINQ. После группировки выполните итерацию для каждой группы и добавьте значение группы дат в первый столбец, а затем выполните итерацию по каждому члену группы и добавьте их все (значения, связанные с датой) во втором столбце.

person ramnujs    schedule 25.08.2011