Javaで帳票作成(JasperReports)パラメータによる動的出力 | Hello, Stupid World!

Hello, Stupid World!

いろいろとメモ代わりに書いていきます。

前回に引き続いてJasperReportsの使い方を説明します。

今回はパラメータを渡して印刷するというJavaアプリケーションを作成します。
手順を記述します。

1.「Report Inspector」のトップの項目を選択し、値の表現に使われる言語を
 初期設定の「Groovy」から「Java」に変更します。

 変え忘れるとJava実行時にjava.lang.NoClassDefFoundError:
 org/codehaus/groovy/control/CompilationFailedException
 とかでます。


2.iReportの「Report Inspector」の「Parameters」で右クリックして
 「追加Parameter」を選択します。

3.追加された「parameter1」を右クリック→「名前を変更・・・」を選択し
 分かりやすい名前に変更。

4追加したパラメータの各項目を必要であれば変更します。
 Parameter Class・・・パラメータの型
 Use as a prompt・・・チェック時はプレビュー時に毎回値を入力
 Default Value Expression・・・初期値
 Description・・・説明

5.パラメータを表示したい位置に「Text Field」を配置する。

6.Text Fieldの「Text Field Expression」の横のボタンを押して
 3で追加したパラメータから取得するようにセットします。
 $P{~}となるようにします。


7.レポートを保存します。

8.出力用のJavaアプリケーションを作成します。

[ソース]
 import java.util.*;
 import javax.print.attribute.*;
 import javax.print.attribute.standard.PrinterName;
 import net.sf.jasperreports.engine.*;
 import net.sf.jasperreports.engine.export.*;

 public class testReport {
  public static void main(String[] args) {
   // テンプレートXMLファイルのパス
      String templatePath = "C:/Work/report1.jrxml"; ・・・①

   try {

       // (1)テンプレートXMLのコンパイル・・・②
       JasperReport jasperReport = JasperCompileManager.compileReport(templatePath);

    // (2)パラメータの生成
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("TEXT", "Hello Jasper Reports");・・・③

// (3)データの動的バインド・・・④
JasperPrint print = JasperFillManager.fillReport(jasperReport, paramMap,
      new JREmptyDataSource());

// (4)プリンターへ出力・・・⑤
PrintServiceAttributeSet atts = new HashPrintServiceAttributeSet();
atts.add(new PrinterName("HP Photosmart C4400 series",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();
   }
  }
 }

[解説]
①iReportで作成したテンプレート(jrxml)ファイルのパスを指定します。
②テンプレートファイルをコンパイルします。
 コンパイル済みテンプレートファイル(jasper)があれば、それを指定する事で
 毎回コンパイルする手間が省けます。
③パラメータを準備します。パラメータはHashMap以外にもBeanでも可能です。
④③で用意したパラメータをコンパイル済みテンプレートファイルに取り込みます。
 帳票から直接DBなどのデータソースを利用していないのでJREmptyDataSource
 を指定しています。
⑤プリンタ名を要素としたパラメータを設定しています。
 
HashPrintServiceAttributeSetに追加する事で両面印刷などの各種設定が可能です。
⑥印刷します。

[実行結果]



出力された実行結果です。
Javaアプリケーションでセットした値が出力されている事が分かります。