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

← (3) Java プログラムから PDF を出力する

目次

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

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

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

個々の要素 (Text Field や Static Text など) に対し日本語フォントを適用するには、帳票レイアウトを設計モードで表示します。対象の要素を選択し、プロパティの[Advanced]設定で、以下の項目を設定します。

create-pdf-by-jasperreports6-and-java_98bzcwea

プロパティ名 意味 プロパティ値
PDF – PDF Embedded フォントを埋め込むかどうか false
(フォントを埋め込まない)
PDF – PDF Encoding エンコーディング UniJIS-UCS2-H (Japanese)
(Adobe-Japan1 の Unicode エンコーディング)
PDF – PDF FontName フォント名 日本語フォントについては、以下の 2 種類が指定できます。

フォント名 内容
HeiseiKakuGo-W5 「平成角ゴ-W5」 ゴシック体
HeiseiMin-W3 「平成明朝-W3」 明朝体

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

以下をダウンロードします。

解凍したフォルダー内の「itext-asian.jar」を、Tomcat プロジェクトの lib フォルダーに配置します。lib フォルダーの中身は、こんな感じ。

create-pdf-by-jasperreports6-and-java_l3d2ewl3

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

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

create-pdf-by-jasperreports6-and-java_wcqyjhl6

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

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

create-pdf-by-jasperreports6-and-java_pheu920e

Adobe Reader のフォント フォルダー内を見てみると、確かに「HeiseiKakuGo-W5」も「HeiseiMin-W3」も無い…。これはまぁ、しゃーないね。

create-pdf-by-jasperreports6-and-java_gp0op2bx

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

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

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

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

KPDN

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

コメントを残す