pChartでの日本語表示にハマる

  • 投稿日:
  • by
  • カテゴリ:
  • ハッシュタグ:

集計もなんとか出来たので、それを元に pChart グラフを書かせます。

とりあえず日本語が表示できるかなと思ってやってみたら、いきなり躓きました。
「Warning: imageftbbox() [function.imageftbbox]: any2eucjp(): something happen in ~」なんていうのが出ます。

pChartはグラフの画像データを作成するんですが、GDの imagettftext を使って画像に文字を書き込みます。
XAMPP 1.7.3 (というよりPHPのWindows版バイナリの)GDは、コンパイルオプションに「-DJISX0208」がついているので、JIS-mapped Japanese Font Support が enabled になっています。

本来 imagettftext はUTF-8でエンコードされた文字列を受け取るのですが、JIS-mapped Japanese Font Support が enabled になっていると Shift-JIS で受け取るように変更されるようです。 これは php.ini などで実行時オプションで変更することは出来ないみたい。

FreeBSDなら、コンパイルし直せばOKなんですが、XAMPPだとそうもいきません。
mb_convert_encoding でSJISを指定して変換すればいいのですが、面倒なのでとりあえずpChartでグラフを描く部分だけ、別のPHPファイルに切りだして文字エンコーディングを Shift-JIS にして保存しました(他のファイルはUTF-8)。

pChartのグラフは、ブラウザへ出力($Test->Stroke();)させます。 呼び出すファイル側で、imgタグで pChart の PHPファイルを指定すれば、そこにグラフの画像が入るというわけです。

他のファイルから pChart のPHPファイルに日本語を含む文字列を送信する場合は、送る前にmb_convert_encoding で Shift-JIS に変換します。

ところでTCPDFと違って、pChart(というかGD)の場合はTTCフォントでも大丈夫なんですね。