JasperReports 6 で PDF を作り、ブラウザーで表示する【4】

JasperReport 6 と Java を使って PDF を出力しました。試行錯誤の連続だったので、忘れないように、一連の手順をまとめました。今回は「【4】日本語が出力できるようにする ~PDF にフォントを埋め込まない編~」です。

← 前回:【3】Java プログラムから PDF を出力する

PDF にフォントを埋め込まないメリットとデメリット

PDF にフォントを埋め込まない場合のメリットは、なんといっても PDF のファイル サイズが小さくなることでしょう。デメリットとして、PDF を表示する環境にインストールされているフォントに依存することになり、場合によっては文字化けが発生したり、PDF 作成者の意図とは異なる表示になる可能性があります。
フォントを埋め込まない場合は、選択したフォントがインストールされていない環境で PDF を表示してみて、意図したとおりに表示されているかを確認したほうが良さそうです。

帳票レイアウトで日本語を出力

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

TextFieldStaticText などの個々の要素に対して日本語フォントを適用するには、帳票レイアウトを「設計モード」で表示します。対象の要素を選択し、プロパティの[Advanced]設定>[PDF]セクションで、以下の項目を設定します。

[JasperReports] PDF 関係の設定
PDF 関係の設定
プロパティ名意味プロパティ値
PDF Embeddedフォントを埋め込むかどうかfalse
(フォントを埋め込まない)
PDF EncodingエンコーディングUniJIS-UCS2-H (Japanese)
(Adobe-Japan1 の Unicode エンコーディング)
PDF FontNameフォント名日本語フォントについては、以下の 2 種類が指定できます。
  • HeiseiKakuGo-W5:「平成角ゴ-W5」 ゴシック体
  • HeiseiMin-W3:「平成明朝-W3」 明朝体

日本語を扱うために必要な JAR ファイルをダウンロード・配置

次をダウンロードします。

展開したフォルダー内の「itext-asian.jar」を、Tomcat プロジェクトの lib フォルダーに配置します。lib フォルダーの中身は、次のようになりました。

[Eclipse] itext-asian.jar を配置
itext-asian.jar を配置

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

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

[JasperReports] PDF の出力結果。日本語が出力されている
PDF の出力結果。日本語が出力されている

今度は日本語がきちんと表示されています。いい感じです。

PDF ファイルのプロパティにて、フォントが設定されているかどうか確認してみました。フォント名は正しく設定されていますが、「HeiseiKakuGo-W5」が実際のフォントでは「KozGoPr6N-Medium」になっています。同様に、「HeiseiMin-W3」は「KozMinPr6N-Regular」になっています。

PDF のプロパティ。フォント名と実際のフォントが異なる
PDF のプロパティ。フォント名と実際のフォントが異なる

Adobe Reader のフォント フォルダー内を見てみると、確かに「HeiseiKakuGo-W5」も「HeiseiMin-W3」もありませんでした。指定されたフォントが無いから代替のフォントが使われるということで、これは仕方がないです。

Adobe Reader のフォント
Adobe Reader のフォント

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

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

  • itext-asian.jar へのクラスパスが通っているか。
  • iTextAsian.jar ではなく、itext-asian.jar を使用しているか。(JasperReports のバージョンにもよると思われますが、私が試したバージョン 6 では、iTextAsian.jar を使用すると例外が発生しました。jar ファイルを解凍して中身を確認してみると、iText 関連のパッケージ名が com.itextpdf で始まるのに対し、iTextAsian.jar は com.lowagie で始まっていました。バージョンアップされた際に、パッケージ名が変更になったのかもしれません。)

次回:【5】日本語が出力できるようにする ~PDF にフォントを埋め込む編~ →

kpdn

お寿司とゲームと動物が好きな、フリーランスのエンジニアです。フロントエンドからインフラまで日々奮闘中です。最近は物忘れがどんどんがひどくなってきました。

コメントを残す