JasperReports 6 で PDF を作り、ブラウザーで表示する (5)

← (4) 日本語が出力できるようにする ~PDF にフォントを埋め込まない編~

目次

日本語が出力できるようにする ~PDF にフォントを埋め込む編~

PDF にフォントを埋め込む場合のメリットは、受け取り側の環境に関わらず、オリジナル通りのフォントで表示したり、印刷したりすることができることでしょう。しかし、デメリットとして、ファイル サイズが大きくなってしまいます。また、フォントのライセンスについて気を配る必要があります。

■フォント ファイルをダウンロード

今回は、PDF への埋め込みが許可されている「IPA フォント」を使用します。

ダウンロードしたファイルを解凍すると、「ipag.ttf」(IPA ゴシック)、「ipagp.ttf」(IPA P ゴシック)、「ipam.ttf」(IPA 明朝)、「ipamp.ttf」(IPA P 明朝)の 4 つのフォント ファイルが入っています。

■フォント ファイルを配置

Tomcat プロジェクトの、クラスパスが通っている任意のフォルダー配下に、フォント ファイルを配置します。今回は、以下のフォルダー構成にしました。

create-pdf-by-jasperreports6-and-java_e5q8449z

■フォント定義 XML ファイルを作成、配置

フォントを配置したのと同じフォルダーに、適当な名前の XML ファイルを作成します。ここでは「fonts.xml」としましたが、別の名前でも OK。

create-pdf-by-jasperreports6-and-java_9xrg2qu6

ファイルに以下のように入力し、保存します。

fonts.xml

XML 項目 内容
fontFamily@name フォント ファミリーの名前。帳票レイアウト上でフォントを選択する時に使う名前なので、わかりやすい適当な値を設定。
fontFamily/normal 通常フォント ファイルのパス。クラスパスのルート フォルダーを基点とする相対パスです。
fontFamily/bold 太字フォント ファイルのパス。クラスパスのルート フォルダーを基点とする相対パスです。太字フォントのファイルが無ければ、記述しなくて OK。
fontFamily/italic イタリック フォント ファイルのパス。クラスパスのルート フォルダーを基点とする相対パスです。イタリック フォントのファイルが無ければ、記述しなくて OK。
fontFamily/pdfEncoding PDF のエンコーディング。「Identity-H」は、日本語の横表示です。
fontFamily/pdfEmbedded PDF にフォントを埋め込むかどうか。今回はフォントを埋め込むので、true とします。

■プロパティ ファイルを作成、配置

クラスパスが通っているルート フォルダーの直下に、「jasperreports_extension.properties」という名前のファイルを作成します。

create-pdf-by-jasperreports6-and-java_vdzg6ew8

ファイルに、以下のように入力し、保存します。
※「fonts/fonts.xml」の部分は、上で作成したフォント定義の XML ファイルまでの相対パスを記述します。

jasperreports_extension.properties

■帳票レイアウトに、日本語フォントを適用

個々の要素 (Text Field や Static Text など) に対し日本語フォントを適用するには、帳票レイアウトを設計モードで表示します。対象の要素を選択し、フォント定義 XML で設定したフォント名を設定します。フォント名はドロップ ダウン リストに出てこないので、直接入力する必要があります。

create-pdf-by-jasperreports6-and-java_3fm5b2mb

■出力結果をブラウザーで確認

ブラウザーでサーブレットにアクセスして、PDF の出力結果を確認します。

create-pdf-by-jasperreports6-and-java_3pp7pzg4

(見た目はショボいが) バッチリです!

PDF ファイルのプロパティにて、フォントが設定されているかどうか、確認してみました。

create-pdf-by-jasperreports6-and-java_iifd3856

指定したフォントが、しっかりと埋め込まれています。お疲れ様でした。

■上手くいかない、その時は…

実行時エラーが出るなど、日本語の出力が上手くいかない場合は、以下を確認してみてください。

  • フォント定義 XML に設定したフォント名と、帳票レイアウトに設定したフォント名が一致しているか。
  • フォント定義 XML に記述した、フォント ファイルへのパス指定が正しいか。
  • jasperreports_extension.properties に記述した、フォント定義 XML ファイルへのパス指定が正しいか。
  • jasperreports_extension.properties は、クラスパスが通っているフォルダーのルート直下に配置しているか。

あとがき

まとめると意外と簡単そうだけど、実際に試した時はかな~り、相当苦戦しました。Java や Tomcat そのものにも慣れていないというのも、大きな原因ではありますが…。プログラムより、設定関係の方が遥かに時間がかかりました。うまく動かない時は、まず環境を疑ったほうが良いという教訓を得ました。疲れた(´-д-)

(6) ★おまけ★ スタイルを一括指定する →

●履歴

  • 2015/07/14 リンクが正しく設定されていなかった箇所を、修正しました。

KPDN

プログラミングとゲームが好きな、しがないにゃんこ好きです。わんこも同じぐらい好きです。最近、物忘れどんどんが酷くなってきた。

コメントを残す