今回はパラメータを渡して印刷するという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());
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);
_ATTRIBUTE_SET, atts);
exporter.exportReport();・・・⑥
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
[解説]
①iReportで作成したテンプレート(jrxml)ファイルのパスを指定します。
②テンプレートファイルをコンパイルします。
コンパイル済みテンプレートファイル(jasper)があれば、それを指定する事で
毎回コンパイルする手間が省けます。
③パラメータを準備します。パラメータはHashMap以外にもBeanでも可能です。
④③で用意したパラメータをコンパイル済みテンプレートファイルに取り込みます。
帳票から直接DBなどのデータソースを利用していないのでJREmptyDataSource
を指定しています。
⑤プリンタ名を要素としたパラメータを設定しています。
HashPrintServiceAttributeSetに追加する事で両面印刷などの各種設定が可能です。
⑥印刷します。
[実行結果]