YellowfinのJasper Reportで日本語を使用する

Yellowfinで請求書や最近話題のインボイスなどの単票レポートを作成したい場合にJasper Reportのjrxml定義をロードして使用する方法があります。
Jasper Reportの使用方法自体はさほど難しくはありませんが、日本語を使用する場合は一工夫する必要が出てきます。
# YellowfinでJasper Reportを実行する
YellowfinでJasper Reportを動作させる基本的な手順はYellowfinのサポートサイトに動画が公開されてましたのでそちらを参照しましょう。
https://support.yellowfin.co.jp/hc/ja/articles/360053727413

動画ではYellowfin、Jaspersoft Studioともに少し前のバージョンでしたが、現在の最新版（Yellowfin:9.9,Jaspersoft Studio:6.20.5）でも同じ手順で作成できました。

# YellowfinがJasper Reportを実行する仕組み
日本語設定の前に少し話が脱線しますが、YellowfinがJasper Reportをどのように利用しているのかを簡単に理解しておきましょう。
上記の動画でもわかるようにYellowfinにはjrxmlファイルをアップロードしています。
jrxmlはJasper Reportの定義ファイルですがここで定義しているのはレポートの体裁（デザイン）とレポートで実行されるクエリSQLです。そしてjrxmlはJasper Reportの仕様に沿って書かれているxmlファイルです。
Yellowfinはjrxmlを同梱のJasper Report Libraryによって体裁を利用して実行しているにすぎません。

## Jaspersoft Studioによるカスタマイズはどうなる
jrxmlの作成・編集はJaspersoft Studioで行います。
Jaspersoft Studioではレポートに様々なカスタマイズが可能ですが、一部の設定はJaspersoft Studio内やビルドして作成されるjasperファイル内でしか有効に働かないものがあります。
Jaspersoft Studioで設定（作成）した追加フォントやフォントファミリーなどがそれに該当します（下記の設定です）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633844/920d631e-a332-5a87-f7da-874f7d96dcd6.png)
jrxmlはレポートの体裁（デザイン）およびSQLが記載されたxmlですのでフォントファイルを保持することやJaspersoft Studioで設定（作成）した追加フォントやフォントファミリーの設定を保持することもできないためです。

## フォントはどこを参照しているのか
Yellowfin上のJasper Report(jrxml)に関連するフォントは２種類あります。
1\. レポート実行時の表示用
2\. PDFエクスポート用

### レポート実行時の表示用のフォント
jrxmlが実行されるマシンのOSに登録されいるフォントを参照します。
したがってYellowfinインスタンスが起動しているサーバーマシンのOSのフォントを参照します。
追加フォントを使用したい場合はYellowfinインスタンスが起動しているサーバーマシンのOSにフォントを追加します。

### PDFエクスポート用のフォント
日本語出力ができるフォントは下記の２種類に限られます。
* HeiseiKakuGo-W5　→　ゴシック
* HeiseiMin-W3　→　明朝

# Jasper Reportを日本語で出力する設定
前置きが長くなりましたがレポートで日本語を使用するための設定をしていきましょう。
今回はIPAフォントを使用する前提で設定を進めます。

## IPAフォントの準備
IPAフォントを使用しますのでフォントファイルを準備します。
[こちら](https://moji.or.jp/ipafont/)からダウンロードしてください。
ダウロードしたzipファイルをサーバーの適当なフォルダーにコピーして展開します。

### RedHat系Linuxの場合
展開したttfファイルを 「/usr/local/share/fonts」 にスーパユーザでコピーします。
```
$ sudo cp -r <zip展開フォルダ> /usr/local/share/fonts/
```
念のためにOSを再起動しましょう。

### Windowsの場合
展開したttfファイルをエクスプローラーで右クリックしてメニューを表示させます。
そのメニューの「すべてのユーザーに対してインストール」を選択します。

::: note warn
ここで「すべてのユーザーに対してインストール」の上に表示されている「インストール」を選択してしまうと現在のユーザーでのみ有効なローカルフォントとなってしまいwebアプリなどの接続が不特定多数のアプリでは使用できなくなってしまいますので注意が必要です。YellowfinおよびJaspersoft Studioでも使用できません。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633844/62b382fd-259c-55e8-0ee4-c572f4dc3f8f.png)
インストールするフォントファイルすべてに対して同じように「すべてのユーザーに対してインストール」を実施します。
念のためにOSを再起動しましょう。

::: note info
フォントを追加する時のポイントはすべてのユーザーで使用できるフォントとして追加することです。
上記のLinuxとWinodowsの手順もすべてのユーザーで使用できるようにしています。
:::

## Jaspersoft Studioの準備
jrxmlはJaspersoft Studioで編集するわけですがクライアントPCにインストールして作業すると使えるフォントがYellowfinインスタンスが起動しているサーバーマシンと異なることがあります（ほぼ異なると思います）。
可能であればサーバーマシンにインストールして作業することで使用できるフォントの確認も同時にできますのでお勧めです。
Jaspersoft Studioのインストール手順はwwwを検索すれば多数ヒットしますのでここでは割愛します。

インストールが完了したら、Jaspersoft Studioを起動し対象のjrxmlを開きます。

### レポート実行時の表示用のフォントの設定
設定の手順はこうです。
1\. フォントを変更するエレメントをクリックして選択します。
2\. 「Properties」ウィンドウの「Advanced」タブをクリックします。
3\. 「Font Name」プロパティの「Value」をドロップダウンから選択して指定します。
4\. 「IPAex明朝」を選択します。

:::note warn
ステップ3のドロップダウンにはOSに登録され使用可能なフォントがリストされます。
ここにインストールした「IPAex明朝」、「IPAexゴシック」が表示されない場合はOSへの登録ができていませんので、フォントのインストールを確認しましょう。
Jaspersoft Studioをサーバーマシンへインストールすることをお勧めしたのは、このドロップダウンのリストに該当のフォントの有無を確認することでOSへのフォントの追加の成否が確認できるからです。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633844/32a873b4-3a93-89d5-a9fb-f638b9be5e15.png)

### PDFエクスポート用のフォントの設定
設定の手順はこうです。
1\. フォントを変更するエレメントをクリックして選択します。
2\. 「Properties」ウィンドウの「Advanced」タブをクリックします。
3\. 「PDF Encoding」プロパティの「Value」をドロップダウンから選択して指定します。
4\. PDFで日本語を出力するには下記のいずれかを選択します。
<dl>
  <dt>UniJIS-UCS2-H(Japanese)</dt>
  <dd>Adobe-Japan1(アドビ社が定めた日本語の表記に使われる文字コレクションの名称)のUnicodeエンコーディング</dd>
  <dt>UniJIS-UCS2-V(Japanese)</dt>
  <dd>UniJIS-UCS2-Hの縦書き</dd>
  <dt>UniJIS-UCS2-HW-H(Japanese)</dt>
  <dd>UniJIS-UCS2-Hと同じ、ただし英文字を半角に置き換える</dd>
  <dt>UniJIS-UCS2-HW-V(Japanese)</dt>
  <dd>UniJIS-UCS2-HW-Hの縦書き</dd>
</dl>

5\. 「PDF Font Name」プロパティの「Value」をドロップダウンから選択して指定します。
6\. PDFで日本語を出力するには下記のいずれかを選択します。
<dl>
  <dt>HeiseiKakuGo-W5</dt>
  <dd>ゴシック</dd>
  <dt>HeiseiMin-W3</dt>
  <dd>明朝</dd>
</dl>

7\. 最後に忘れずに保存します。

# Yellowfinで実行
ようやくYellpwfinでJasper Reportを実行します。
Yellowfinへの導入手順は冒頭のYellowfinのサポートサイトのページを参照してください。