2013-06-20 6 views
1

Я хочу создать таблицу, содержащую заказы клиентов. Таблица (упрощенная) выглядит следующим образом. Если у клиента несколько заказов, я просто добавляю информацию о клиентах в первую строку клиента. Таким образом, заказы 1 до 3 относятся к клиенту 1 и заказам 4 &-к клиенту 2iText: как повторить содержимое ячейки таблицы на новой странице?

Customer | Order (header row) 
-------------+-------------------------------------------- 
    Name 1  | Item 1 (Order 1) 
    Street  | 
    City  | 
-------------+-------------------------------------------- 
       | Item 1 (Order 2) 
       | Item 2 
-------------+-------------------------------------------- 
       | Item 1 (Order 3) 
-------------+-------------------------------------------- 
    Name 2  | Item 1 (Order 4) 
    Street  | Item 2 
    City  | Item 3 
       | Item 4 
-------------+-------------------------------------------- 
       | Item 1 (Order 5) 

это работает отлично, за исключением того, если я получаю разрыв страницы/новую страницу. В этом случае, таблица будет выглядеть следующим образом:

Customer | Order 
-------------+-------------------------------------------- 
    Name 1  | Item 1 (Order 1) 
    Street  | 
    City  | 
-------------+-------------------------------------------- 
       | Item 1 (Order 2) 
       | Item 2 
### new page ### 
    Customer | Order 
-------------+-------------------------------------------- 
       | Item 1 (Order 3) 
-------------+-------------------------------------------- 
    Name 2  | Item 1 (Order 4) 
    Street  | Item 2 
    City  | Item 3 
       | Item 4 
-------------+-------------------------------------------- 
       | Item 1 (Order 5) 

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

Customer | Order 
-------------+-------------------------------------------- 
    Name 1  | Item 1 (Order 1) 
    Street  | 
    City  | 
-------------+-------------------------------------------- 
       | Item 1 (Order 2) 
       | Item 2 
### new page ### 
    Customer | Order 
-------------+-------------------------------------------- 
    Name 1  | Item 1 (Order 3) 
    Street  | 
    City  | 
-------------+-------------------------------------------- 
    Name 2  | Item 1 (Order 4) 
    Street  | Item 2 
    City  | Item 3 
       | Item 4 
-------------+-------------------------------------------- 
       | Item 1 (Order 5) 

Я думаю, заполнение ячейки может быть выполнено комбинированным событием страницы/ячейки, но для этого потребуется установить минимальную высоту всех клиентских ячеек на высоту заполненной ячейки клиента, так как я не знаю, когда/где новая страница будет происходят. Это потеряло бы много места, если бы у меня были большие клиентские ячейки и ячейки небольшого порядка. Любые идеи, как я могу построить таблицу, подобную приведенной выше, и повторить содержимое определенной ячейки после разрыва страницы/новой страницы?

ответ

1

Я нашел старт для возможного решения (для IText 5.1 +):

  • добавить таблицу к ColumnText
  • записать таблицу в документ с использованием ColumnText.go() в цикле.
  • после каждого go() получить количество строк, записанных с помощью ColumnText.getRowsDrawn()
  • создать новый PdfPTable (с теми же параметрами, что и исходной таблицы)
  • копии всех строк из ColumnText.getRowsDrawn() до конца исходной таблицы в новую таблицу cellwise. Теперь я могу заменить первую пустую ячейку первой строки необходимыми данными.
  • удалить исходную таблицу из ColumnText с ColumnText.setText(null)
  • добавить копию в ColumnText

не забудьте заменить «оригинал» таблицу с копией или вы получите бесконечный цикл. не забудьте скопировать и установить любые строки заголовка или нижнего колонтитула с оригинала сначала, прежде чем добавлять какой-либо контент.

+0

Вы могли решить эту проблему? –