JasperReportsでフォントを埋め込まない日本語PDFを生成する方法

はじめに

JasperReportsで日本語PDFを作成する場合、日本語フォントの指定を おこなう必要があります。フォントの扱いは以下の2通りがあります。

フォントをPDFに埋め込むと、環境に依存せず同じ見た目が保てる利点があり、 明朝・ゴシック以外のフォントや外字フォントを用いる場合に有益です。 しかし、フォントをPDFに埋め込むと以下の問題が発生します。

外字を利用する、毛筆フォントを利用する、 といったフォントを埋め込む必然性がある場合を除いて、 ほとんどの場合はフォントを埋め込まない方法が望ましいと私は考えています。
どういう訳か、雑誌やWebでのJasperReportsの紹介記事では フォント埋め込み方式しか紹介されていないようです。 そこで、このページではフォントを埋め込まない方式を紹介します。

JasperReportsの紹介

JasperReportsは Javaで動作するオープンソースの帳票ライブラリです。 私はPDF生成ツールとして注目しています。 このツールには以下の機能的な特徴があります。

JasperReportsの内部構造上の特徴は以下の通り。

フォント指定方法

JasperReportsはPDF生成にiTextを使用しています。 そのため、フォントの取り扱いはiTextに従います。 東アジア言語のiTextでの使いかたは、 iText TutorialのCJKフォント解説に書いてあります。

Report XMLファイルの中で、 reportFontエレメントでフォントの指定を行う場合に、 以下の設定を行います。

  <reportFont name="Gothic" isDefault="false"
    fontName="Default Gothic" size="10" pdfFontName="HeiseiKakuGo-W5"
    pdfEncoding="UniJIS-UCS2-H" isPdfEmbedded="false"/>
  <reportFont name="Mincho" isDefault="false"
    fontName="Default Mincho" size="10" pdfFontName="HeiseiMin-W3"
    pdfEncoding="UniJIS-UCS2-H" isPdfEmbedded="false"/>
    
name
定義するフォントの識別子です。 実際に出力コンテンツでフォントを指定する時、 fontエレメントで使用します。
fontName
何のために存在するのか良くわかりません。Acrobat Readerで `フォント情報' に表示するフォント名でしょうか? (追記: javaしかできない によると、XSL, HTMLで使用して、PDFには影響ないそうです)
pdfEncoding
フォントのエンコード形式を指定します。例で使用している `UniJIS-UCS2-H' は `文字集合: Adobe Japanese1, エンコード形式:Unicode(UCS2), 半角文字を欧文フォントに置き換えない, 横書き' を表しています。 参考:エンコーディング形式 (つながらなくなっているので、 Web Archiveに残っていたページへリンクします)。 ただ、`UniJIS-UCS2-H' と `UniJIS-UCS2-HW-H' を試して比べてみたのですが 見た目は変わらなかったです。実際のところ、何が違うのでしょうね。
pdfFontName
isPdfEmbeddedがtrueの場合、フォントファイル名を指定します。 isPdfEmbeddedがfalseの場合、PDFファイルに記録するフォント名を指定します。 埋め込まなくても良いフォントは、欧文基本14フォント, 日本語標準フォント, 簡体中国語標準フォント, 繁体中国語標準フォント, 韓国語標準フォント のみと考えると良いでしょう。

JasperReportsを組み込んだプログラムを動作させてPDFを生成したら、 AcrobatReaderのメニュー「ファイル - 文書のプロパティ - フォント」 を見てフォントが埋め込まれていないことを確認してみましょう。


ホームへ戻る

落合秀俊hidetosi@aware.jp
Last modified: Mon Oct 25 06:04:14 JST 2004