あります。
そんな時にどうするか説明します。
あと、今回はBeanを使ったパラメータの渡し方を合わせて説明します。
まずはBeanを用意。
[Bean]
NoとStatusという数値型のメンバーをもったBeanを作ってみました。
この作ったBeanをiReportとか読めるように設定します。
上部の「ツール」メニューから「オプション」を選択してオプションダイアログを
出し、「Classpath」タブに遷移後、「Add Folder」ボタンを押して
作ったBeanのパスを選択します。
次に出力先のレポートを開いて
Previewの右隣にある(赤い四角で囲んだ)ボタンを押します。
「JavaBean」タブを選択し、Class nameにクラス名を入れて「Read attribute」
ボタンを押すと、Beanのメンバーが表示されます。
出力したいメンバーを選択後、「Add Selected field」ボタンを押した後
「OK」ボタンを押します。
するとデザイン画面左の「Report Inspector」欄の「Fields」に追加されます。
これをデザイン画面の出力したい位置にドラッグして下さい。
今回は値による表示切替も行います。
そんな時はプロパティーの「Priint When Expression」に条件式を記述します。
「$F{no} != 0 ? Boolean.TRUE : Boolean.FALSE」
Javaできる人なら分かると思いますがnoが0でない場合はTRUE(表示)
0の場合はFALSE(非表示)です。
ここまでできたら、次は印刷のプログラムを書いていく。
[main]
public class printMain {
public static void main(String[] args) {
// テンプレートXMLファイルのパス
String templatePath = "C:/Work/report1.jrxml";
try {
// (1)テンプレートXMLのコンパイル
JasperReport jasperReport =
JasperCompileManager.compileReport(templatePath);
// (2)パラメータの生成
List<ReportBean> fields = new ArrayList<ReportBean>();
ReportBean reportBean = new ReportBean();
reportBean.setNo(1);
reportBean.setStatus(1);
fields.add(reportBean);
ReportBean reportBean2 = new ReportBean();
reportBean2.setNo(2);
reportBean2.setStatus(2);
fields.add(reportBean2);
ReportBean reportBean3 = new ReportBean();
reportBean3.setNo(0);
reportBean3.setStatus(3);
fields.add(reportBean3);
// (4)データの動的バインド
JasperPrint print = JasperFillManager.fillReport(jasperReport, null, new
JRBeanCollectionDataSource(fields));
// (5)プリンターへ出力
PrintServiceAttributeSet atts = new HashPrintServiceAttributeSet();
atts.add(new PrinterName("Microsoft XPS Document
Writer",Locale.getDefault()));
JRExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
atts);
exporter.exportReport();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
ほとんど前回と同じです。
違いはバインドする時にデータソースとしてJRBeanCollectionDataSourceという
クラスを使います。引数には作ったBeanをセット。
出力結果です。
3個目はNoに0をセットしたのでNoもStatusも表示されていません。
表示条件が正常に動作している事を確認できました。