4617
[PrimeFaces](http://www.primefaces.org/) の
[DataExporter](http://www.primefaces.org/showcase/ui/data/dataexporter/basic.xhtml)で
PDF を出力すると日本語が表示されません。

以下のような対応を実施してみましたが、解決できていません。

  * `iTextAsian.jar` をプロジェクトに組み込み
  * [primefaces-extensions](http://www.primefaces.org/showcase-ext/views/home.jsf) の [exporter](http://www.primefaces.org/showcase-ext/views/exporter.jsf) を利用し、  
`fontName=HeiseiKakuGo-W5,encording=UniJIS-UCS2-H` を指定

対処方法をご存知の方がいれば教えてください。
CC BY-SA 3.0
2015-01-13T07:46:28.043
4487
2015-01-15T12:14:53.963
2015-01-15T07:45:32.847
5792
5792
question
java 文字化け pdf 日本語 primefaces
Primefaces の DataExporter による PDF 出力で日本語を出力する
ドキュメントが見当たらないので Primefaces Extensions のソース見てみました。  
<https://github.com/primefaces-
extensions/core/blob/master/src/main/java/org/primefaces/extensions/component/exporter/PDFExporter.java>  
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 詳しくないのでどんな影響が出るかは分かりませんが、解決の糸口になればと思います。
CC BY-SA 3.0
2015-01-15T12:14:53.963
4617
2015-01-15T12:14:53.963
7395
4487
answer