2013-04-23 2 views
0

Я создал PdfPTable (с заголовком), который разбит на несколько страниц. Я использую ColumnText в режиме моделирования, чтобы добавить таблицу и вычислить количество страниц, на которых показана таблица. Теперь я ищу лучший способ добавить счетчик x/n для каждого заголовка.Как добавить номера страниц в заголовок таблицы?

Пример: моя строка заголовка - «Таблица о материалах». Я подсчитал, что таблица разделена на 3 страницы. Полученные заголовки должны выглядеть так: «Таблица о материалах 1/3» для первой страницы, «Таблица о материалах 2/3» для второй страницы, «Таблица о материалах 3/3» для третьей страницы.

Что было бы лучшим способом сделать это? Возможно ли это?

ответ

1

Лучший способ сделать это - использовать событие ячейки.

Я не готовый пример, но вы могли бы составить его самостоятельно, комбинируя следующие примеры:

В MovieCountries1 примере, Я решил «Страница X из Y» проблемы. Вы всегда знаете значение X, но пока вы все еще создаете документ, вы не знаете значения Y (общее количество страниц). В вашем случае у вас есть аналогичная проблема. Вы хотите добавить «часть X of Y».

Вы можете достичь этого, добавив ячейку emptry, для которой вы создаете пользовательский PdfPCellEvent. Вы можете найти несколько примеров с событиями ячеек, ища ключевые слова PdfPCell > events на официальном сайте iText.

Давайте посмотрим на RunLengthEvent примере, где мы используем пользовательский PdfPCellEvent с именем PressPreview:

class PressPreview implements PdfPCellEvent { 

    public BaseFont bf; 

    public PressPreview() throws DocumentException, IOException { 
     bf = BaseFont.createFont(); 
    } 

    public void cellLayout(PdfPCell cell, Rectangle rect, 
      PdfContentByte[] canvas) { 
     PdfContentByte cb = canvas[PdfPTable.TEXTCANVAS]; 
     cb.beginText(); 
     cb.setFontAndSize(bf, 12); 
     cb.showTextAligned(Element.ALIGN_RIGHT, "PRESS PREVIEW", 
      rect.getRight() - 3, rect.getBottom() + 4.5f, 0); 
     cb.endText(); 
    } 
} 

В этом примере текст «ПРЕСС-АНОНС» добавляется ко всем клеткам, к которому вы добавили это событие вот так:

PdfPCellEvent press = new PressPreview(); 
PdfPCell cell = new PdfPCell(); 
cell.setCellEvent(press); 

В вашем случае вы должны добавить к пользовательскому событию две переменные-члены. Один PdfTemplate, на который вы напишете значение Y. Один int, который отслеживает количество срабатываний события. Это X. Когда полная таблица будет добавлена ​​в документ, вы Y будете равны X, и вы можете заполнить это значение на PdfTemplate.

Подведено: что вы хотите не невозможно, но это не тривиально.

+0

Событие на клетке сделало трюк. Однако я не использовал PdfPTemplate. Я сохранил ссылку на событие и установил общее количество страниц позже. Это позволяет мне принимать решения в зависимости от этого числа, т. Е. Я не хочу добавлять 1/1, если таблица соответствует одной странице. – Cryn

+0

Отлично, рад, что мой ответ помог вам и поблагодарил вас за его принятие! –

Смежные вопросы