質問: PrimeFaces の DataExporterで PDF を出力すると日本語が表示されません。 以下のような対応を実施してみましたが、解決できていません。 * `iTextAsian.jar` をプロジェクトに組み込み * primefaces-extensions の exporter を利用し、 `fontName=HeiseiKakuGo-W5,encording=UniJIS-UCS2-H` を指定 対処方法をご存知の方がいれば教えてください。
回答: ドキュメントが見当たらないので Primefaces Extensions のソース見てみました。 createCustomFonts の 917行目 の箇所が問題のようです。 ``` if (fontName != null && FontFactory.getFont(fontName).getBaseFont() != null) { this.cellFont = FontFactory.getFont(fontName, encoding); this.facetFont = FontFactory.getFont(fontName, encoding, Font.DEFAULTSIZE, Font.BOLD); } else { this.cellFont = FontFactory.getFont(FontFactory.TIMES, encoding); this.facetFont = FontFactory.getFont(FontFactory.TIMES, encoding, Font.DEFAULTSIZE, Font.BOLD); } ``` `FontFactory.getFont` が fontName しか渡していないので "HeiseiKakuGo-W5" Font が取れず else の方に流れているようです。 ここを以下のように書き換えると動きそうですが、PrimeFaces Extensions をビルドしないとダメなので大変な感じですね。 ``` if (fontName != null && FontFactory.getFont(fontName, encoding).getBaseFont() != null) { ``` 一応、iText の field をいじる方法で日本語出ました。 ダウンロードをする前のどこかのタイミングで ``` FontFactory.defaultEncoding = "UniJIS-UCS2-H"; ``` をしておけば日本語出力されました。 iText 詳しくないのでどんな影響が出るかは分かりませんが、解決の糸口になればと思います。