JasperReport 6 と Java を使って PDF を出力しました。試行錯誤の連続だったので、忘れないように、一連の手順をまとめました。今回は「【4】日本語が出力できるようにする ~PDF にフォントを埋め込まない編~」です。
← 前回:【3】Java プログラムから PDF を出力する
もくじ
PDF にフォントを埋め込まないメリットとデメリット
PDF にフォントを埋め込まない場合のメリットは、なんといっても PDF のファイル サイズが小さくなることでしょう。デメリットとして、PDF を表示する環境にインストールされているフォントに依存することになり、場合によっては文字化けが発生したり、PDF 作成者の意図とは異なる表示になる可能性があります。
フォントを埋め込まない場合は、選択したフォントがインストールされていない環境で PDF を表示してみて、意図したとおりに表示されているかを確認したほうが良さそうです。
帳票レイアウトで日本語を出力
帳票レイアウトに日本語フォントを適用
TextField
や StaticText
などの個々の要素に対して日本語フォントを適用するには、帳票レイアウトを「設計モード」で表示します。対象の要素を選択し、プロパティの[Advanced]設定>[PDF]セクションで、以下の項目を設定します。
プロパティ名 | 意味 | プロパティ値 |
---|---|---|
PDF Embedded | フォントを埋め込むかどうか | false (フォントを埋め込まない) |
PDF Encoding | エンコーディング | UniJIS-UCS2-H (Japanese) (Adobe-Japan1 の Unicode エンコーディング) |
PDF FontName | フォント名 | 日本語フォントについては、以下の 2 種類が指定できます。
|
日本語を扱うために必要な JAR ファイルをダウンロード・配置
次をダウンロードします。
- iText の extrajars(xtrajars-x.x.zip)
展開したフォルダー内の「itext-asian.jar」を、Tomcat プロジェクトの lib
フォルダーに配置します。lib
フォルダーの中身は、次のようになりました。
出力結果をブラウザーで確認
ブラウザーでサーブレットにアクセスして、PDF の出力結果を確認します。
今度は日本語がきちんと表示されています。いい感じです。
PDF ファイルのプロパティにて、フォントが設定されているかどうか確認してみました。フォント名は正しく設定されていますが、「HeiseiKakuGo-W5」が実際のフォントでは「KozGoPr6N-Medium」になっています。同様に、「HeiseiMin-W3」は「KozMinPr6N-Regular」になっています。
Adobe Reader のフォント フォルダー内を見てみると、確かに「HeiseiKakuGo-W5」も「HeiseiMin-W3」もありませんでした。指定されたフォントが無いから代替のフォントが使われるということで、これは仕方がないです。
上手くいかない、その時は…
実行時エラーが出るなど、日本語の出力が上手くいかない場合は、以下を確認してみてください。
itext-asian.jar
へのクラスパスが通っているか。iTextAsian.jar
ではなく、itext-asian.jar
を使用しているか。(JasperReports のバージョンにもよると思われますが、私が試したバージョン 6 では、iTextAsian.jar
を使用すると例外が発生しました。jar ファイルを解凍して中身を確認してみると、iText 関連のパッケージ名がcom.itextpdf
で始まるのに対し、iTextAsian.jar はcom.lowagie
で始まっていました。バージョンアップされた際に、パッケージ名が変更になったのかもしれません。)
次回:【5】日本語が出力できるようにする ~PDF にフォントを埋め込む編~ →