Как я могу создать оглавление в iReport / JasperReports? - PullRequest
1 голос
/ 19 апреля 2011

Мы используем iReport, чтобы наши клиенты могли создавать каталоги для печати своих продуктов.Этот процесс работает БОЛЬШОЙ.Одна из вещей, с которой мы боролись, - это как создать оглавление для этих каталогов продуктов.

Я решил использовать функциональность Scriptlet, чтобы сделать это.Обратите внимание, что все наши отчеты по своей сути являются основными деталями, поскольку в них есть основной отчет и вложенный отчет.

Сначала я прикрепил скриптлет к основному отчету и попытался найти способ собрать всеномеров продуктов в подробном отчете, затем передайте это значение в основной отчет.Я не могу понять, как получить подробную информацию обратно в основной отчет, так как кажется, что вы можете только передавать переменные по умолчанию из подотчета обратно в мастер (например, PAGE_NUMBER, COLUMN_NUMBER, PAGE_COUNT, COLUMN_COUNT).1006 * Итак, я попытался прикрепить Scriptlet к подробному отчету.Ну, подробный отчет не знает, на какой странице находится мастер, поэтому я начал передавать номер страницы мастера в переменную в подробном отчете.Это прекрасно работало, за исключением того, что иногда детали могут переполняться до такой степени, что номера страниц из мастера пропускаются.Другими словами, если подотчет возвращает данные более чем на две страницы, при следующем вызове подотчета будет пропущен номер страницы.

Так как это сделать?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Я нашел подход, который работал, похожий на одну из моих идей выше. Прежде всего, я НЕ смог получить подотчет, чтобы возвратить значение в отчет о вызовах, а затем извлечь это значение, используя getVariableValue из скриптлета. Я пытался вечно, и я просто не мог заставить это работать.

Вместо этого я применил один и тот же скриптлет как к основному, так и к подчиненным отчетам. В скриптлете есть переменная class , в которой я могу вести подсчет всех номеров продуктов, с которыми я сталкиваюсь в деталях, и этот код входит в метод afterDetailEval () скриплета. Обратите внимание, что я хочу, чтобы этот код выполнялся только для подотчета, поэтому я проверяю, присутствует ли конкретное поле сведений, которое никогда не будет нулевым. Если это не так, я не запускаю код. Поэтому, когда это событие вызывается из основного отчета, код не запускается.

Теперь о той части, которую я выучил на примере. Примечательным побочным эффектом программирования в этом примере является то, что в свойстве «Print When Expression» есть строка измерений 1x1, которая содержит вызов пользовательского метода скриптлета. Это блестящая идея! Таким образом, этот пользовательский метод возвращает false, несмотря ни на что, и строка никогда не печатается. Я сделал то же самое в бэнде Page Footer, и этот метод собирает значения из переменной класса, определяет страницу и сохраняет результаты в хэше. Затем он сбрасывает переменную класса.

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

1 голос
/ 20 апреля 2011

Пример оглавления (с вложенным отчетом) в папке проекта jasperreports-xxx / demo / samples / tableofcontents .

И посмотрите также пример гиперссылки.

Гиперссылки, Якоря и Закладки

JasperReports позволяет создавать детализированные отчеты, которыепредставлять оглавления в ваших документах или перенаправлять средства просмотра на внешние документы, используя специальные элементы отчета, называемые гиперссылками.

...