JasperReport触ってみる

仕事でPDF帳票作成にJasperReportを使うことになったのでちょっと触ってみる。
テンプレートファイルはiReportで作成。

package sample;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;


public class PDFSample {

	//テンプレートファイル名
	public static final String TEMPLATE_FILE = "template/SampleTemplate.jrxml";

	//出力PDFファイル名
	public static final String PDF_FILE = "pdf/Sample.pdf";


	/**
	 * PDF出力サンプル
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {

		//テンプレートファイルコンパイル
		JasperReport jasperReport = JasperCompileManager.compileReport(TEMPLATE_FILE);

		//データソース作成
		List list = createSampleData();
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);

		//データバインド
		JasperPrint print = JasperFillManager.fillReport(jasperReport, null, ds);

		//PDF出力
		JasperExportManager.exportReportToPdfFile(print, PDF_FILE);

	}

         //データ作成
	private static List<DataBean> createSampleData() {

		List<DataBean> list = new ArrayList<DataBean>();

		for(int i=0;i<50;i++) {
			DataBean bean = new DataBean();
			bean.setSAMPLE_COLMN("あああああ");
			bean.setREGIST_DATE(new Date());
			list.add(bean);
		}
		return list;
	}


}


意外とにあっという間にできた。

メモ

  • 日本語フォントを使用するには「iTextAsian.jar」と「iTextAsianCmaps.jar」が必要。
  • Beanをデータソースとして使用するには「JRBeanCollectionDataSource」を使う。

テンプレートファイルのコンパイルは最初の1回だけでいいから、実際に業務で使う場合は、コンパイル済みファイルを読み込むようにしたほうがよさそう。
iReportでテンプレート作る時にフィールド名をDBのカラム名と同じにしたせいで、データソースに使うBeanのフィールド名が非常にいけてない事に。ああ〜