JavaアプリでPDF出力する方法を実務で実装したのでメモしておきます。
#1、 Jaspersoft Studio
をインストールし、帳票のテンプレートファイル(jrxmlファイル)を作成する
まずはEclipseで、
ヘルプ → Eclipseマーケットプレイス・ウィザードを開く
でマーケットプレイスを開き、JasperSoft Studioをインストールします。インストールが終わったら、
src/main/webapp/template/ 配下でjrxmlファイルを作成します。このjrxmlファイルでレイアウトを作成し、パラーメータを割り当てます。また、ここではフォントを「IPAex明朝」にしておきます。
#2、 jarファイル一式をダウンロード
下記のjarファイル一式をダウンロードします。
bcprov-jdk15on-1.68.jar
castor-core-1.4.1.jar
castor-xml-1.4.1.jar
commons-beanutils-1.9.4.jar
commons-collections-3.2.2.jar
commons-collections4-4.2.jar
commons-digester-2.1.jar
commons-lang3-3.4.jar
commons-logging-1.1.1.jar
ecj-3.21.0.jar
gson-2.8.6.jar
itext-2.1.7.js8.jar
jackson-annotations-2.12.4.jar
jackson-core-2.12.3.jar
jackson-databind-2.12.5.jar
jasperreports-6.18.1.jar
javax.inject-1.jar
jcommon-1.0.23.jar
jfreechart-1.0.19.jar
これらをダウンロードしたら、
src/main/webapp/WEB-INF/libの直下にすべてコピーします。必ずしもバージョンは記載のものでなくても大丈夫です。新しいものがあればそっちをダウンロードしてください。
#3、帳票ファイル定義とデフォルトデータを追加する
次に、
src/main/java に exportというパッケージを作成します。(名前は任意)
そのパッケージ下でclassファイルを作成します。
このファイルでパラメータを取得します。
#4、帳票データ設定処理を追加する
src/main/java/export に サーブレットファイルを作ります。
ここに帳票データ設定処理を追加していきます。(必要があればデータベースに接続したり)
#5、PDF出力用のJSPを作成する
src/main/webapp/WEB-INFの配下に出力用のJSPを作成します。
4で作成したサーブレットにアクセスするaタグを実装します。このリンクを押せばPDFが出力されます。
#6、フォント等のインストール
まず、src/main/resources配下にfontsという名前のパッケージを作成します。この中にフォントをインストールします。
今回は「IPAex明朝」でjrxmlファイルを作成したので、「ipaexg.ttf」 と 「ipaexm.ttf」 をダウンロードして、fontsパッケージ下にコピーします。
また、「pdf_font.xml」 という名前のxmlファイルもfontsパッケージ下に作成し、下記のように入力します。
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="IPAexゴシック">
<normal>fonts/ipaexg.ttf</normal>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
<fontFamily name="IPAex明朝">
<normal>fonts/ipaexm.ttf</normal>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
</fontFamilies>
最後にsrc/main/resources配下に 「jasperreports_extension.properties」 の名前でファイルを作成して、下記のように入力します。
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.font=fonts/pdf_font.xml
これでPDF出力できるようになります。