четверг, 22 августа 2019 г.

Формирование печатной формы XLSx с переносом групп на новую страницу (pageBreak) из JusperReports.


  • Описание проблемы:

При установке атрибута «Start new page»=True в свойствах группы JusperReport, библиотека export.xls рассчитывает размер свободного пространства от нижней границы группы до края листа и заполняет его растянутой строкой, чтобы Excel переносил следующую запись группы на новую страницу. Но Excel клал железный бетон на эти расчёты и переносит растянутую ячейку на новую страницу, таким образом отчёт превращается в беспорядочную кашу переносов страниц и разрывов.

  • Описание варианта обхода:


Написанное ниже на основе анализа исходного кода библиотеки net.sf.jasperreport, не претендует называться решением, т.к. производимые действия не совсем логичны, однако именно в такой конфигурации шаблон выдаёт на печать предсказуемый результат, без не объяснимых разрывов.

Установить дополнительные параметры отчёта, в части группы export.xls, как показано на рис. 1.

Рис.1

Добавить Band типа «Column Header» установить ему высоту от 20-50 px, и добавить доп. атрибут «freeze»=2 как на рис.2

Рис.2

Band «Header» группы, которую надо печатать с новой страницы, должен следовать сразу за Band типа «Column Header», который мы настроили выше.
Для Band «Header» устанавливаем атрибут «start new page»=true
Первым элементом Band «Header» должен быть «Static Text» любой высоты, с атрибутом «print related values»=true.
Правильная последовательность элементов на рис.3.

Рис.3

Границы «Bottom» и «Top» в Свойствах печати страницы должны быть равны 0, см.рис. 4.
Рис.4