【JasperReports】Javaで帳票出力(PDF)をする
曲がりなりにもJavaから帳票を出力するところまでの手順を示す。
手順
1.帳票フォーマットを準備
以下記事にて作成したフォーマットを使用。少し追加・修正をしていく。
【JasperReports】JasperSoft Studioの使い方チュートリアル - なにかのさしすせそ
●フォントのダウンロード
以下から帳票で使用するフォントをダウンロードする。
ダウンロード(Download) | IPAexフォント/IPAフォント
一応2書体パックをダウンロード。
exgがゴシック、exmが明朝。使うフォントによっては以下の説明中で一部読み替える必要がある点があるので注意。
2.プロジェクトにフォントを登録
JasperSoft Studioを開く。プロジェクトを右クリック → Properties を選択する。
Jaspersoft Studio - Fontsを選択。Use Project Settingsに切り替えAddをクリック。
Family Nameを「IPAex」に。TrueType(,ttf)は先程ダウンロードしたIPAexフォントを指定。PDF Encodingは「Identity-H」を選択しFinish。
FontNameに「IPAex」が追加されていることを確認しOK。
使用している文字入力のフィールド(Text Field、 Static Textなど)のフォントに「IPAex」を指定する。
※フォントの選択肢に先程追加したFamily Nameが現れない場合はJasperSoft Studioを落として上げなおすと出てくるかも
全てIPAexに設定したら、プレビューで問題なく表示されることを確認。
応用編として、帳票に組み込まれているSQLに変数を設定してみる。変数を設定しておけばプログラムから値を送り込めるため、動的に条件が変更できるようになる。
Dataset and Query... を選択。
SQLはこんな感じで記入。$P{変数名} で変数を設定する。
画面下部、Parametersタブへ移動する。
【Add】を押下。
新規のパラメータが追加される。
新規パラメータの名前を、先ほどSQLに書いたパラメータ名に変更。Class Typeも条件比較する型に合わせて変更。
OKで帳票画面に戻り、【Preview】タブを選択してみる。
プレビュー表示前にパラメータ設定画面が出ることを確認。値を設定して動かしてみる。
パラメータが機能していることを確認。
3.Javaのプロジェクト設定
Eclipseを使った操作説明をするので、他のIDEを使用している場合は適当に読み替える事。
プロジェクトの作成。このサンプルでは【Java プロジェクト】で作成。
プロジェクト名は適当に。
こんなプロジェクトができる。
以下3つのフォルダを追加。フォルダ名を変える場合は以降の説明で適時読み変えする事。
libフォルダに以下に示すJasperReports出力関連のjarをどっかからかき集めて入れる。もしかしたら不要なファイルがあるかもしれない。。。
追加したjarファイルをビルドパスに追加。
JasperReports Studioにて、2.の手順まで終えたフォーマットファイルをコピー。
Javaプロジェクトのformatフォルダに貼り付け。
resをソースフォルダに変更。(はじめからソースフォルダで作っておけばよかった…)。
resフォルダにパッケージ「fonts」を追加。
「jasperreports_extension.properties」ファイルをres下に作成。
中身はこんな感じ。
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory net.sf.jasperreports.extension.simple.font.families.ipaex=fonts/IPAex.xml
fontsパッケージにIPAex.xmlを作成。
中身はこんな感じ
<?xml version="1.0" encoding="UTF-8"?> <fontFamilies> <fontFamily name="IPAex"> <normal>fonts/ipaexg.ttf</normal> <pdfEncoding>Identity-H</pdfEncoding> <pdfEmbedded>true</pdfEmbedded> </fontFamily> </fontFamilies>
1.でダウンロードしたttfファイルをfontsパッケージに入れる。
libフォルダに利用するDBのJDBCドライバを入れてクラスパスを通しておく。画像はMySQL。
srcフォルダにクラスファイルを追加。
ソースはこんな感じ。
import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.util.HashMap; 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; public class SampleMain { /** * @param args * * 【JasperReports】を使ったpdf作成サンプル * */ public static void main(String[] args) { try { // PDFフォーマットファイルを指定する File jrxmlFile = new File("format/Test_A4.jrxml"); if(jrxmlFile.exists()){ //コネクション取得 Connection m_con = null; //ここは各自の環境設定 String url = "jdbc:mysql://localhost/test"; String user = "hoge"; String password = "hogehoge1122"; //jdbcドライバをクラスパスに追加しておくこと Class.forName("com.mysql.jdbc.Driver").newInstance(); m_con = DriverManager.getConnection(url, user, password); //PDFに埋め込まれた変数に値を設定するためのパラメータ HashMap<String, Object> params = new HashMap<String, Object>(); params.put("min_id", 3); // jrxmlをコンパイルする JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlFile.getAbsolutePath()); // データソースとパラメータをコンパイルされた帳票に設定 /** 日本語が表示されない場合は Jaspersoft Studio上で * 日本語が出ないオブジェクトのフォントが *「IPAex」以外になっていないかチェック */ JasperPrint pdf = JasperFillManager.fillReport(jasperReport, params, m_con); // 出力用のパス・ファイル名を指定する //以下の場合はプロジェクトフォルダの直下にPDFが作成される File path = new File("sample.pdf"); // 帳票の出力 JasperExportManager.exportReportToPdfFile(pdf, path.getAbsolutePath()); }else{ System.out.println("jrxmlファイルが見つかりませんでした。"); } } catch (Exception e) { e.printStackTrace(); } } }
Javaプログラムを実行。
プログラム実行が正常に完了するとPDFが出来ている。(見えない場合はF5で表示を更新)
作成されたPDFを開いてみて、
・日本語が問題無く表示されている
・与えた条件での検索結果が表示されている
事を確認。
あとは各自で色々試してみること。