6

私は JasperReport と iReport を評価しています。要件は、すべてのページに異なるレポートが含まれる複数ページのレポートを作成できることです。

例:
ページ 1 には顧客への実際の請求書が
含まれます ページ 2 には顧客への請求書リストが含まれます
ページ 3 には年ごとの請求額のグラフが含まれ
ます ページ 4 には固定テキストのみが含まれます (オペレーターの指示など...)

4 つの独立したレポートを作成してから PDF をマージする代わりに、このような独自のレポートを作成することは可能ですか?

4

5 に答える 5

9

私は何か違うことを試しました:

Ireport 4.1.3 を使用しました。detail1 セクションを右クリックすると、別の詳細セクションを追加できます。

休憩ページを追加して完了です。

于 2012-01-05T15:41:00.117 に答える
4

はい、メイン レポートのサブ レポートごとに dataSource と Parameters マップを作成することで可能です。

データ ソースには、レポートにテーブルとして表示されるリストが含まれています

パラメータ マップには、レポート内のテキスト フィールドのキーと値が含まれます

良いニュースは、すべてのページのすべてのパラメーターを各パラメーター マップに含めることができ、レポート処理で各ページがそのパラメーターを抽出し、他のものを忘れることです:)

例 :

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);
             }
        }
    }

}
于 2012-08-31T11:01:38.793 に答える
1

はい、可能です。レポート全体を、4つの個別のサブレポートの構成として作成できます。これにより、再利用性と関心の分離が可能になります。

于 2010-04-09T09:16:31.573 に答える
0

はい、「それが理にかなっている場合」、顧客とは関係のないレポートを含めることもできます。

また、さらに面白くするために、このレポートを完成させた後、それを別のレポートに入れることができます。そうすれば、複数の顧客に対して同じレポートを取得できます。

于 2010-04-18T09:05:51.110 に答える