Как перезапустить номер страницы с 1 в другой группе отчета BIRT
Backgroud: используйте Java + BIRT для генерации отчета. Создайте отчет в программе просмотра и разрешите пользователю выбрать его экспорт в другой формат (pdf, xls, word...).
Все программы находятся в "Макете", в "Мастер-странице" нет программ. Есть 1 "Набор данных". Поля в "Макете" относятся к этому DS. Есть группа в "Макете", гропу по одному полю. В "Заголовке группы" я создаю одну ячейку для использования в качестве номера страницы. Msgstr "Страница: MyPageNumber". "MyPageNumber" - это поле, которое я определяю, которое будет равно +1 в заголовке группы.
Проблема: Когда я использую 1-й метод для создания отчета, "MyPageNumber" не может отображаться правильно. Поскольку заголовок группы загружается только один раз для каждой группы. Это всегда будет показывать 1.
Вопрос: Как я знаю, в отчете Crystal есть "номер страницы перезапуска в группе". Как перезапустить страницу в BIRT? Я хочу показать данные разных групп в 1 файле отчета, а номер страницы начинается с 1 для каждой группы.
2 ответа
Увы, это не поддерживается с BIRT.
Вероятно, это не тот ответ, на который вы надеялись, но это правда. Это один из немногих аспектов, где BIRT сильно отстает от других инструментов генерации отчетов.
Однако, в зависимости от того, как BIRT интегрирован в вашу среду, возможен обходной путь для экспорта в PDF, который мы с большим успехом используем в нашем решении. Идея состоит в том, чтобы позволить BIRT создать схему PDF на основе группировки. А отчет BIRT создает в ReportContext информацию о том, где и как он хочет отображать номера страниц. После того, как BIRT сгенерировал PDF, пользовательский PDFPostProcessor использует схему PDF и информацию из ReportContext для добавления номеров страниц с помощью iText. Если этот обходной путь является жизнеспособным для вас, не стесняйтесь связаться со мной.
Вы можете сделать это с помощью отчетов BIRT, используя переменные страницы. Например:
- Добавьте 2 переменные страницы... Group_page, Group_name.
- Добавить 1 переменную отчета... Group_total_page.
В отчете перед фабрикой добавьте скрипт:
prevGroupKey = ""; groupPageNumber = 1; reportContext.setGlobalVariable("gGROUP_NAME", ""); reportContext.setGlobalVariable("gGROUP_PAGE", 1);
В отчете на странице добавьте скрипт:
var groupKey = currGroup; var prevGroupKey = reportContext.getGlobalVariable("gGROUP_NAME"); var groupPageNumber = reportContext.getGlobalVariable("gGROUP_PAGE"); if( prevGroupKey == null ){ prevGroupKey = ""; } if (prevGroupKey == groupKey) { if (groupPageNumber != null) { groupPageNumber = parseInt(groupPageNumber) + 1; } else { groupPageNumber = 1; } } else { groupPageNumber = 1; prevGroupKey = groupKey; } reportContext.setPageVariable("GROUP_NAME", groupKey); reportContext.setPageVariable("GROUP_PAGE", groupPageNumber); reportContext.setGlobalVariable("gGROUP_NAME", groupKey); reportContext.setGlobalVariable("gGROUP_PAGE", groupPageNumber); var groupTotalPage = reportContext.getPageVariable("GROUP_TOTAL_PAGE"); if (groupTotalPage == null) { groupTotalPage = new java.util.HashMap(); reportContext.setPageVariable("GROUP_TOTAL_PAGE", groupTotalPage); } groupTotalPage.put(groupKey, groupPageNumber);
В главной странице скрипта onRender добавьте следующий скрипт:
var totalPage = reportContext.getPageVariable("GROUP_TOTAL_PAGE"); var groupName = reportContext.getPageVariable("GROUP_NAME"); if (totalPage != null) { this.text = java.lang.Integer.toString(totalPage.get(groupName)); }
В заголовке группы таблиц для события onCreate добавьте следующий сценарий, заменив "СТРАНА" именем столбца, по которому вы группируете:
currGroup = this.getRowData().getColumnValue("COUNTRY");
- На главной странице добавьте сетку в верхний или нижний колонтитул и добавьте переменную автотекста для Group_page и Group_total_page. При желании также добавьте переменную страницы для Group_name.
Проверьте эти ссылки для получения дополнительной информации о переменных страницы BIRT:
- https://books.google.ch/books?id=aIjZ4FYJOQkC&pg=PA85&lpg=PA85&dq=birt+change+autotext&source=bl&ots=K0nCmF2hrD&sig=CBOr_otRW0B72sZoFS7LC_1Mrz4&hl=en&sa=X&ei=ZKNAVcnuLYLHsAXRmIHoCw&ved=0CEoQ6AEwBQ
- https://www.youtube.com/watch?v=lw_k1qHY_gU
- http://www.eclipse.org/birt/phoenix/project/notable2.5.php
- https://bugs.eclipse.org/bugs/show_bug.cgi?id=316173
- http://www.eclipse.org/forums/index.php/t/575172/