FOP-0.16.0 日本語化パッチ

English | Japanese

download , project page




1. はじめに

本パッチは、http://xml.apache.org/fop が提供している FOP-0.16.0 で日本語 ( Type0 フォント ) を表示可能にするためのパッチです。本パッチにより、以下のファミリフォント名が使用可能となります。

本パッチは、以下の環境でコンパイルと PDF 作成の動作確認をしております。

注意:本パッチは、国際化対応版 JDK でなければ、正しく実行する事ができないかもしれません。また、日本語フォント表示可能なマシン環境でなければ、本パッチで生成された PDF ファイルを正しく表示できないかもしれません。




2. インストール

  1. http://xml.apache.org/dist/fop/ より fop-0_16_0.zip ( or fop-0_16_0.tar.gz ) をダウンロード
  2. fop-0_16_0.zip ( or .tar.gz ) を解凍
  3. http://www.sourceforge.net/projects/jpfop/ より jpfop_0_16_0.zip ( or jpfop_0_16_0.tar.gz ) をダウンロード
  4. fop-0_16_0 ディレクトリ配下に jpfop_0_16_0.zip ( or .tar.gz ) を解凍
  5. http://xml.apache.org/dist/xalan-j/ より xalan-j_1_2_2.zip ( or xalan-j_1_2_2.tar.gz ) をダウンロード
  6. xalan-j_1_2_2.zip ( or .tar.gz ) 内の xerces.jar、xalan.jar、bsf.jar をクラスパスに含める。
    本パッチでは、簡易的に、xerces.jar、xalan.jar、bsf.jar を fop-0_16_0/lib ディレクトリにコピーすることにより、自動的にこれら jar ファイルがクラスパスに含まれます。もし、それ以外の場所に jar ファイルがある場合には、build-jpfop.bat 内の変数 XERCES、XALAN、BSF に jar ファイルの場所を指定して下さい。
  7. コマンドラインより
    > cd fop-0_16_0
    > build-jpfop ( or ./build-jpfop.sh )
    を実行。
  8. BUILD SUCCESSED と表示されれば、日本語対応版 fop-0.16.0-jp.jar 完成
  9. 続けて、コマンドラインより
    > cd jpfop
    > makesample_jpfop ( or ./makesample_jpfop.sh )
    と実行することにより、日本語対応版 FOP により、sample_jpfop.pdf が生成

図.sample_jpfop.pdf

注意:本パッチは、日本語フォントしか提供していませんが、韓国語、中国語への拡張も容易に出来るはずです。もし、本パッチが提供している以外のフォントを使用したい場合、fop-0_16_0/src/codegen/cidfont や fop-0_16_0/src/codegen/cmp 配下に情報を作成し、FontSetup.java と build-jpfop.xml にその情報を追加して下さい。




3.1 日本人開発者の方へ

強制ではありませんが、以下について、jpfop-develop@lists.sourceforge.net へ報告をしていただけると非常に助かります。本メーリングリストの詳細は、http://lists.sourceforge.net/lists/listinfo/jpfop-develop を参照して下さい。

コンパイルについて
あなたの環境 ( OS , JDK など ) で、本パッチを用いて fop-0.16.0-jp.jar が作成できたか否か。特に、Linux、BSD、Machintosh、HP-UX 等の環境での報告は非常に助かります。作成できなかった場合、発生例外も報告していただけると助かります。

実行について
あなたの環境で日本語 PDF を作成した際、問題があるか否か。本パッチは、様々な環境でのテストが不十分なため、あなたの環境では問題があるかもしれません。例えば、Windows と Machintosh では、シフト JIS の 0x8740 付近のコードポイントが異なっています。
これらの文字を使用した際、文字化け等の問題があるかもしれません。しかし、私の手元に Machintosh 環境がないため、これらの確認を行うことができていません。

閲覧について
本パッチの閲覧は、現在、Windows 用 Adobe Acrobat Reader 4.0/4.05a でのみしか行っていません。Machintosh 用 Acrobat Reader や UNIX 用 Acrobat Reader ( acroread ) での閲覧が正常に行われるかを報告して頂けると非常に助かります。また、問題報告の際にどのプラットフォームで作成した PDF を閲覧出来なかったのかも書いていただけると助かります。



3. ソース

3.1 修正したクラス

本パッチでは、fop-0.16.0 の以下のクラスを修正しています。

org.apache.fop.layout.LineArea
org.apache.fop.pdf.PDFFontDescriptor
org.apache.fop.pdf.PDFDocument
org.apache.fop.render.pdf.PDFRenderer
org.apache.fop.render.pdf.FontSetup

3.1.1 org.apache.fop.layout.LineArea

修正したのは addText() メソッドです。日本語は 2 バイト文字なので、範囲は 0 から 65535 です。従来、127 以上の値をとる文字があった場合、自動的に "#" に変換していたので、そのコードをコメントアウトしました。

また、従来、単語ごとに改行の判定を行っていましたが、日本語では単語を半角スペースで区切らないため、正しく改行が行われませんでした。そのため、日本語の場合、1 行に表示できる文字数をオーバーした際に改行するコードを追加しました。

3.1.2 org.apache.fop.pdf.PDFFontDescriptor

修正したのは toPDF() メソッドです。Rectangle.toPDF() の戻り値は、byte[] なので、既存のコードでは Rectangle に配列を正しく表示していない。これは、おそらく toPDF() メソッドの BUG でしょう。

修正前:
p.append("\n/FontBBox "); p.append(fontBBox.toPDF());
修正後:
p.append("\n/FontBBox "); p.append(new String(fontBBox.toPDF()));

3.1.3 org.apache.fop.pdf.PDFDocument

修正したのは makeFont() メソッドと makeFontDescriptor() メソッドです。

makeFont() メソッド : FontDescriptor が指定されていない際、CIDFont なのか判定し、CIDFont の場合、Type0 フォントと認識するように修正しました。

makeFontDescriptor() メソッド : オプションの属性を提供した OptionalFontDescriptor クラスが引数で渡された場合とそうでない場合の処理を分けました。また、PDFFontDescriptor オブジェクトをインスタンス化する際、ItalicAngle と StemV の位置が逆になっていました。これは、おそらく BUG でしょう。

3.1.4 org.apache.fop.render.pdf.PDFRenderer

修正したのは renderInlineArea() メソッドです。Type0 フォント ( CIDFont ) の場合の処理を追加しました。まず、UTF-8 の文字列を CIDFont で指定したエンコーディングで変換します。CIDFontType2 の場合、コードポイントは TrueType なのでそのまま書き出します。

CIDFontType0 の場合、コードポイントは Adobe Type1 なので、CIDFont で指定した CMap に基づいてマッピングを行います。そして、Italic の場合、文字を斜めにします。BOLD の場合、位置をずらしながら 4 回書く処理をします。

3.1.5 org.apache.fop.render.pdf.FontSetup

修正したのは setup() メソッドです。日本語 Font を追加しました。



3.2 新規に追加されるクラスとインタフェイス

本パッチでは、fop-0.16.0 に対して以下のクラスとインタフェイスを新規に追加します。

org.apache.fop.layout.OptionalFontDescriptor
org.apache.fop.pdf.PDFCIDFont
org.apache.fop.pdf.PDFOptionalFontDescriptor
org.apache.fop.pdf.PDFFontType0
org.apache.fop.render.pdf.CIDFont
org.apache.fop.render.pdf.CMap

3.2.1 org.apache.fop.layout.OptionalFontDescriptor

オプションの属性を提供した FontDescriptor インタフェイスです。FontDescriptor の詳細については、PDF1.3 Reference Manual [1] 7.11 Font descriptors p.222 を参照して下さい。

3.2.2 org.apache.fop.pdf.PDFCIDFont

PDF 中の CIDFont オブジェクトを表すクラスです。CIDFont の詳細については、PDF1.3 Reference Manual [1] 7.8 CIDFonts p.210 や Adobe CMap and CID Font Files Specification Version 1.0 [2] を参照して下さい。

3.2.3 org.apache.fop.pdf.PDFOptionalFontDescriptor

PDF 中の FontDescriptor のオプションの属性を表すクラスです。

3.2.4 org.apache.fop.pdf.PDFFontType0

PDF 中の Type0 フォントを表すクラスです。Type0 フォントの詳細については、PDF1.3 Reference Manual [1] 7.7.7 Type0 Fonts p.207 を参照して下さい。

3.2.5 org.apache.fop.render.pdf.CIDFont

CIDFont を表すクラスです。

3.2.6 org.apache.fop.render.pdf.CIDFontWidthsEntry

CIDFont の Width に含まれるエントリを表すクラスです。CIDFont では、

の 2 種類のフォーマットがあります。詳細は、PDF1.3 Reference Manual [1] 7.8.3 Character widths in CIDFonts p.213 を参照して下さい。

3.2.7 org.apache.fop.render.pdf.CMap

コードポイントを表すインタフェイスです。指定されたコードポイントを CMap に従ってマッピングします。日本語の Adobe コードポイントについては、Adobe-Japan1-4 Character Collection for CID-Keyed Fonts [3] を参照して下さい。

3.2.8 org.apache.fop.render.pdf.Widths

Width 属性を表すクラスです。



3.3 新規に作成されるクラス

本パッチでは、fop-0.16.0 に対して、codegen を利用して以下のクラスが XML ファイルから自動的に生成されます。

org.apache.fop.render.pdf.cmap._90ms_RKSJ_H
org.apache.fop.render.pdf.fonts.jp.GothicBBBMedium
org.apache.fop.render.pdf.fonts.jp.MSGothic
org.apache.fop.render.pdf.fonts.jp.MSGothicAlias
org.apache.fop.render.pdf.fonts.jp.MSGothicBold
org.apache.fop.render.pdf.fonts.jp.MSGothicBoldAlias
org.apache.fop.render.pdf.fonts.jp.MSGothicBoldItalic
org.apache.fop.render.pdf.fonts.jp.MSGothicBoldItalicAlias
org.apache.fop.render.pdf.fonts.jp.MSGothicItalic
org.apache.fop.render.pdf.fonts.jp.MSGothicItalicAlias
org.apache.fop.render.pdf.fonts.jp.MSMincho
org.apache.fop.render.pdf.fonts.jp.MSMinchoAlias
org.apache.fop.render.pdf.fonts.jp.MSMinchoBold
org.apache.fop.render.pdf.fonts.jp.MSMinchoBoldAlias
org.apache.fop.render.pdf.fonts.jp.MSMinchoBoldItalic
org.apache.fop.render.pdf.fonts.jp.MSMinchoBoldItalicAlias
org.apache.fop.render.pdf.fonts.jp.MSMinchoItalic
org.apache.fop.render.pdf.fonts.jp.MSMinchoItalicAlias
org.apache.fop.render.pdf.fonts.jp.Osaka
org.apache.fop.render.pdf.fonts.jp.RyuminLight



4. 既知の日本語対応パッチの問題

本ドキュメントでは、一部を除き、日本語対応における既知の問題のみ書かれています。FOP の問題については、fop-dev@xml.apache.org や fop-cvs@xml.apache.org を参照して下さい。




5. リファレンス

  1. Portable Document Format Reference Manual Version 1.3:
    http://partners.adobe.com/asn/developer/acrosdk/DOCS/PDFRef.pdf
  2. Adobe CMap and CID Font Files Specification Version 1.0:
    http://partners.adobe.com/asn/developer/PDFS/TN/5014.CMap_CIDFont_Spec.pdf
  3. Adobe-Japan1-4 Character Collection for CID-Keyed Fonts:
    http://partners.adobe.com/asn/developer/PDFS/TN/5078.Adobe-Japan1-4.pdf
  4. Adobe Font Metrics File Format Specification Version 4.1:
    http://partners.adobe.com/asn/developer/PDFS/TN/5004.AFM_Spec.pdf