読者です 読者をやめる 読者になる 読者になる

【JasperReports】Javaで帳票出力(PDF)をする

曲がりなりにもJavaから帳票を出力するところまでの手順を示す。



手順

1.帳票フォーマットを準備

以下記事にて作成したフォーマットを使用。少し追加・修正をしていく。

【JasperReports】JasperSoft Studioの使い方チュートリアル - なにかのさしすせそ


●フォントのダウンロード

以下から帳票で使用するフォントをダウンロードする。
ダウンロード(Download) | IPAexフォント/IPAフォント
f:id:ksk428:20150708212322p:plain


一応2書体パックをダウンロード。

f:id:ksk428:20150708212332p:plain

exgがゴシック、exmが明朝。使うフォントによっては以下の説明中で一部読み替える必要がある点があるので注意。
f:id:ksk428:20150708212345p:plain

2.プロジェクトにフォントを登録
JasperSoft Studioを開く。プロジェクトを右クリック → Properties を選択する。

f:id:ksk428:20150708212357p:plain

Jaspersoft Studio - Fontsを選択。Use Project Settingsに切り替えAddをクリック。
f:id:ksk428:20150708212402p:plain

Family Nameを「IPAex」に。TrueType(,ttf)は先程ダウンロードしたIPAexフォントを指定。PDF Encodingは「Identity-H」を選択しFinish。
f:id:ksk428:20150708212415p:plain

FontNameに「IPAex」が追加されていることを確認しOK。

f:id:ksk428:20150708212422p:plain

使用している文字入力のフィールド(Text Field、 Static Textなど)のフォントに「IPAex」を指定する。
 ※フォントの選択肢に先程追加したFamily Nameが現れない場合はJasperSoft Studioを落として上げなおすと出てくるかも
f:id:ksk428:20150708212429p:plain

全てIPAexに設定したら、プレビューで問題なく表示されることを確認。
f:id:ksk428:20150708212436p:plain

応用編として、帳票に組み込まれているSQLに変数を設定してみる。変数を設定しておけばプログラムから値を送り込めるため、動的に条件が変更できるようになる。

Dataset and Query... を選択。

f:id:ksk428:20150708212446p:plain

SQLはこんな感じで記入。$P{変数名} で変数を設定する。
f:id:ksk428:20150708212501p:plain

画面下部、Parametersタブへ移動する。

f:id:ksk428:20150708212508p:plain

【Add】を押下。
f:id:ksk428:20150708212516p:plain

新規のパラメータが追加される。
f:id:ksk428:20150708212529p:plain

新規パラメータの名前を、先ほどSQLに書いたパラメータ名に変更。Class Typeも条件比較する型に合わせて変更。

f:id:ksk428:20150708212550p:plain

OKで帳票画面に戻り、【Preview】タブを選択してみる。
f:id:ksk428:20150708212559p:plain

プレビュー表示前にパラメータ設定画面が出ることを確認。値を設定して動かしてみる。
f:id:ksk428:20150708212610p:plain

パラメータが機能していることを確認。

f:id:ksk428:20150708212620p:plain


3.Javaのプロジェクト設定

Eclipseを使った操作説明をするので、他のIDEを使用している場合は適当に読み替える事。

プロジェクトの作成。このサンプルでは【Java プロジェクト】で作成。

f:id:ksk428:20150708212647p:plain

プロジェクト名は適当に。
f:id:ksk428:20150708212657p:plain

こんなプロジェクトができる。
f:id:ksk428:20150708212703p:plain

以下3つのフォルダを追加。フォルダ名を変える場合は以降の説明で適時読み変えする事。
f:id:ksk428:20150708212720p:plain

libフォルダに以下に示すJasperReports出力関連のjarをどっかからかき集めて入れる。もしかしたら不要なファイルがあるかもしれない。。。
f:id:ksk428:20150708212729p:plain

追加したjarファイルをビルドパスに追加。
f:id:ksk428:20150708212742p:plain

JasperReports Studioにて、2.の手順まで終えたフォーマットファイルをコピー。
f:id:ksk428:20150708212753p:plain

Javaプロジェクトのformatフォルダに貼り付け。

f:id:ksk428:20150708212808p:plain

resをソースフォルダに変更。(はじめからソースフォルダで作っておけばよかった…)。
f:id:ksk428:20150708212820p:plain

resフォルダにパッケージ「fonts」を追加。
f:id:ksk428:20150708212832p:plain

「jasperreports_extension.properties」ファイルをres下に作成。

f:id:ksk428:20150708212849p:plain
f:id:ksk428:20150708212904p:plain
f:id:ksk428:20150708212913p:plain
f:id:ksk428:20150708212929p:plain

中身はこんな感じ。

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を作成。

f:id:ksk428:20150708212945p:plain
f:id:ksk428:20150708212958p:plain
f:id:ksk428:20150708213010p:plain

中身はこんな感じ

<?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パッケージに入れる。
f:id:ksk428:20150708213027p:plain

libフォルダに利用するDBのJDBCドライバを入れてクラスパスを通しておく。画像はMySQL。

f:id:ksk428:20150708213038p:plain

srcフォルダにクラスファイルを追加。

f:id:ksk428:20150708205118p:plain

ソースはこんな感じ。

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プログラムを実行。

f:id:ksk428:20150708205702p:plain

プログラム実行が正常に完了するとPDFが出来ている。(見えない場合はF5で表示を更新)

f:id:ksk428:20150708205809p:plain

作成されたPDFを開いてみて、
 ・日本語が問題無く表示されている
 ・与えた条件での検索結果が表示されている
事を確認。

f:id:ksk428:20150708205846p:plain


あとは各自で色々試してみること。