iReport&JasperReportsでサブレポートを作成します。
こちらを参考にサブレポートを作成していきたいと思います。
まず、[ウィンドウ]⇒パレットを選択し、サブレポートをドラッグしてきます。
今回は新しいレポートを選択します。既に作成済みの場合は[既存のレポートを使用]を選択してください。
レイアウトと保存名とパス指定以外デフォルト状態で[次へ]を押していいと思います。
完了を押下するとサブレポートが出来上がります。
必要に応じてサブレポートの言語を変更します。
メインレポートからサブレポートにパラメータを渡したい場合、メインレポートからサブレポートのフィールドを選択し、プロパティにあるパラメータから設定することでできます。
メインレポートとは違った名前の指定や式を用いて変換することもできるみたいです。
データソースをメインレポート⇒サブレポートに渡す場合。
今回はデータソースをCollection型データを渡すようにします。
まず、メインレポートにてJRBeanCollectionDataSourceをインポートします。
レポートを右クリック⇒プロパティ⇒インポート⇒追加の順にクリックし、
net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
を入力します。
次にメインレポートにてサブレポートのフィールドを選択し、Connection typeをUse a datasource expessionを選択します。
データソース文字列に
[java]
new JRBeanCollectionDataSource($F{フィールド名})
[/java]
を挿入します。
パラメータ⇒フィールド名⇒プロパティを開き、パラメータクラスに「java.util.Collection」を選択します。
あとはJAVA側でパラメータにコレクション型を渡せばOKです。
例)
[java]
ArrayList<ArrayList<String>> サブレポートのデータソース = new ArrayList<ArrayList<String>>();
ArrayList<String> サブレポートのフィールド = new ArrayList<String>();
サブレポートのフィールド.add("test");
サブレポートのフィールド.add("test2");
サブレポートのフィールド.add("test3");
サブレポートのデータソース.add(サブレポートのフィールド);// レポートのパラメータを作成する
HashMap parameters = new HashMap<String, String>();//データソースの作成
dataSource = new JRBeanCollectionDataSource(メインレポートのデータソース);//サブレポートのデータソースセット
parameters.put("フィールド名", サブレポートのデータソース);//出力処理
JasperPrint print = JasperFillManager.fillReport(テンプレートパス+ファイル名, parameters, メインレポートのデータソース);<br /><br />// PDFファイルへ出力する
//直接出力の場合
//JasperExportManager.exportReportToPdf(print,"pdf/output/sample_report2.pdf");
//byteにて格納する場合
byte[] bytes = JasperExportManager.exportReportToPdf(print);
[/java]
これでサブレポートが出来ると思います。