2015-12-29 2 views
1

Я построил шаблон отчета; который использует базовый отчет для верхних и нижних колонтитулов, а затем подзаголовок, в который можно ввести отчет. В целом это прекрасно работает; однако я отметил, что после того, как итоговый отчет завершился в главном отчете, есть пустые страницы.Пустые страницы после Subreport Использование JasperReports

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

Есть ли способ отрезать посторонние страницы? В моем шаблоне основного отчета имеется следующий набор свойств:

When No Data Type: No Pages 

В этом отчете представлена ​​та же настройка.

Я нашел один полезный пост здесь: JasperReports: How to remove new page blank in subreport

Это предложил добавить следующий параметр reportElement тег для фактического subreport:

isRemoveLineWhenBlank="true" 

Делать это на самом деле удалено все, кроме одной дополнительной пустой страницы; что является огромным успехом. Но все же осталась одна пустая страница.

Это то, что источник выглядел как после изменения:

<subreport overflowType="Stretch"> 
    <reportElement x="-20" y="0" width="792" height="20" isRemoveLineWhenBlank="true" uuid="e6d4ec67-6ce6-4bbb-b40b-edfb1cfb4722"> 

В силе общего характер проблемы; особенно при формулировании вопроса в названии, мне трудно найти соответствующие статьи по этому вопросу. Если есть какие-либо релевантные страницы/статьи/статьи в блогах, информация будет оценена по достоинству.

+0

В какой диапазон вы используя вложенный отчет, я вижу отрицательных х, общее решение, чтобы не сделать reportElement-х больше, то нужно (его лучше использовать isStretchWithOverflow = «истинный» на TextElement. –

+0

подотчет является в разделе подробно. – Gedalya

ответ

1

Если вы создаете отчеты с помощью Java, вы можете удалить последнюю пустую страницу в качестве обходного пути.

JasperPrint jp = JasperFillManager.fillReport(report, params, dataSource); 
for (Iterator<JRPrintPage> iterator = jp.getPages().iterator(); iterator.hasNext();) { 
    JRPrintPage page = iterator.next(); 
    if (!iterator.hasNext() && page.getElements().isEmpty()) { 
      iterator.remove(); 
    } 
}