JasperReports многостраничный отчет с различным содержанием - PullRequest
6 голосов
/ 09 апреля 2010

Я оцениваю JasperReport и iReport. Требуется возможность создания многостраничного отчета, в котором каждая страница содержит отдельный отчет.

Пример:
Страница 1 содержит фактический счет для клиента
Страница 2 содержит список счетов для клиента
Страница 3 содержит график количества счетов по годам
Страница 4 содержит только фиксированный текст (скажем, инструкции оператора ...)

Можно ли создать такой уникальный отчет вместо создания четырех автономных отчетов, а затем объединить PDF-файлы.

Ответы [ 5 ]

9 голосов
/ 05 января 2012

Я пробовал что-то другое:

Я использовал Ireport 4.1.3, и если вы щелкнете правой кнопкой мыши на разделе detail1, вы можете добавить еще один раздел детализации.

Добавьте страницу разрыва, и все готово.

3 голосов
/ 31 августа 2012

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

Источник данных содержит список, который будет отображаться в виде таблицы в отчете

Карта параметров содержит ключи и значения текстовых полей в отчете

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

Пример:

List<Map<String, Object>> ParamList = new ArrayList<Map<String, Object>>();
List<JRDataSource> SourceList = new ArrayList<JRDataSource>();

Map<String, Object> params = new HashMap<String, Object>();
params.put("Page1_param1", "value1_1");
params.put("Page1_param2", "value1_2");
params.put("Page1_param3", "value1_3");
..
params.put("Page2_param1", "value2_1");
params.put("Page2_param2", "value2_2");
params.put("Page2_param3", "value2_3");
..
params.put("Page3_param1", "value3_1");
params.put("Page3_param2", "value3_2");
params.put("Page3_param3", "value3_3");
..
..
List listResult_1 = //select table sql for example
List listResult_2 = //select table sql for example
List listResult_3 = //select table sql for example

JRDataSource dataSource_1 = new ListOfArrayDataSource(
listResult_1, new String[] {"LastName", "FirstName", "address"});

JRDataSource dataSource_2 = new ListOfArrayDataSource(
listResult_2, new String[] {"LastName", "FirstName", "address"});

JRDataSource dataSource_3 = new ListOfArrayDataSource(
listResult_3, new String[] {"LastName", "FirstName", "address"});

// Yes i know ! :D , we put the same params list then as i said befor every sub report will take its own parameters values, so don't worry about this task ;)
ParamList.add(params);
ParamList.add(params);
ParamList.add(params);

SourceList.add(dataSource_1);
SourceList.add(dataSource_2);
SourceList.add(dataSource_3);

File reportFile = // the jrxml file template of the report

// We can use also a list of reportFile, so that every page uses his own template :D


CreateReport(jasperReport, ParamList, SourceList);

}

Теперь мы создаем каждый подотчет и добавляем его в основной отчет:

Public void CreateReport(File reportFile, List<Map<String, Object>> ParamList,  List<JRDataSource> SourceList){

    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());
    Map<String, Object> parameters = paramList.get(0);
    JRDataSource datasource = datasourceList.get(0);
    jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, datasource);

    if(paramList.size()>1){
        for(int i=1; i < paramList.size(); i++)
        {
            JasperPrint jasperPrint_next = JasperFillManager.fillReport(jasperReport, paramList.get(i), datasourceList.get(i));
             List pages = jasperPrint_next.getPages();
             for (int j = 0; j < pages.size(); j++) {
               JRPrintPage object = (JRPrintPage) pages.get(j);
               jasperPrint.addPage(object);
             }
        }
    }

}
2 голосов
/ 28 июня 2019

Вы можете использовать книгу отчетов в отчетах jasper и добавлять отдельные отчеты в книгу отчетов по мере необходимости.

Здесь вы найдете инструкции:

книга отчетов о яшме

Report book templates

1 голос
/ 09 апреля 2010

Да, это возможно. Вы можете создать весь отчет как композицию из четырех отдельных вложенных отчетов. Это обеспечит возможность их повторного использования и разделения проблем.

0 голосов
/ 18 апреля 2010

Да, вы можете даже включать отчеты, которые не имеют отношения к клиенту, «если это имеет смысл».

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

...