2010/06/28
カテゴリ : Tech
OpenFlashChart2で日本語をちゃんと表示するパッチ
こんにちは、熊谷です。
前回はOpenFlashChart2を使ってグラフ表示ということで書きましたが、このOpenFlashChart2は一部機能が日本語表示に対応していないため使えない機能があります。
その機能とはX軸のラベルを回転させる機能です。長いラベル名を複数用いたり項目が多い場合などX軸のラベルが重なり合いとても見にくい状態になります。

こんなときこのラベルに角度をつけることにより、ラベル同士が重なり合うことを防ぐことができ見やすいグラフを生成することが可能になるのですが、OpenFlashChart2では日本語に対応していないため日本語のラベルでこの機能を使うと、

このようにラベルが表示されなくなってしまいます。
そんなことでこれに対応するためのパッチを書きました。
内容的には、欧米フォントが指定されている部分があったのでそこを日本語フォントにしているだけです。ここでは日本語フォントファイルとしてipagui.ttfを使用してますが、お好きな日本語フォントファイルを指定して、open-flash-chartディレクトリにそのフォントファイルをあらかじめコピーしておいてください。
で、あとはこのパッチを当ててOpenFlashChart2をコンパイルして完了です。できあがったswfを使ってグラフを表示すると、

こんな感じで表示されます。ただ、フォントを埋め込んでいるためファイルサイズが大きくなってしまいますが、その辺は仕方がない?上手い方法があれば是非教えてください。
ちなみにOpenFlashChart2でこのラベルの回転を行うにはrotateプロパティを使用します。データとなるJSONはこんな感じです。
ということで、日本語が表示できないと困っている方いましたら試してみてください。
前回はOpenFlashChart2を使ってグラフ表示ということで書きましたが、このOpenFlashChart2は一部機能が日本語表示に対応していないため使えない機能があります。
その機能とはX軸のラベルを回転させる機能です。長いラベル名を複数用いたり項目が多い場合などX軸のラベルが重なり合いとても見にくい状態になります。
こんなときこのラベルに角度をつけることにより、ラベル同士が重なり合うことを防ぐことができ見やすいグラフを生成することが可能になるのですが、OpenFlashChart2では日本語に対応していないため日本語のラベルでこの機能を使うと、
このようにラベルが表示されなくなってしまいます。
そんなことでこれに対応するためのパッチを書きました。
- ---
elements/axis/XAxisLabels.as.orig 2010-06-28 17:45:47.000000000 +0900 - +++
elements/axis/XAxisLabels.as 2010-06-28 17:54:46.000000000 +0900 - @@
-2,6 +2,7 @@ import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; - +
import flash.text.Font; import flash.display.DisplayObject; import flash.geom.Rectangle; import elements.axis.AxisLabel; - @@
-22,9 +23,13 @@ // Ugh, ugly code so we can rotate the text: // // [Embed(systemFont='Arial', fontName='spArial', mimeType='application/x-font', unicodeRange='U+0020-U+007E')] - -
[Embed(systemFont = 'Arial', fontName = 'spArial', mimeType = 'application/x-font')] - -
- -
public static var ArialFont__:Class; - +
[Embed(source='../../ipagui.ttf', - +
fontName = 'ipagui', - +
mimeType = 'application/x-font' - +
)] - +
- +
public static var ipagui:Class; - +
Font.registerFont(ipagui); function XAxisLabels( json:Object ) { - @@
-223,7 +228,7 @@ if( label_style.rotate != 0 ) { // so we can rotate the text - -
fmt.font = "spArial"; - +
fmt.font = "ipagui"; title.embedFonts = true; } else
内容的には、欧米フォントが指定されている部分があったのでそこを日本語フォントにしているだけです。ここでは日本語フォントファイルとしてipagui.ttfを使用してますが、お好きな日本語フォントファイルを指定して、open-flash-chartディレクトリにそのフォントファイルをあらかじめコピーしておいてください。
で、あとはこのパッチを当ててOpenFlashChart2をコンパイルして完了です。できあがったswfを使ってグラフを表示すると、
こんな感じで表示されます。ただ、フォントを埋め込んでいるためファイルサイズが大きくなってしまいますが、その辺は仕方がない?上手い方法があれば是非教えてください。
ちなみにOpenFlashChart2でこのラベルの回転を行うにはrotateプロパティを使用します。データとなるJSONはこんな感じです。
- {
"title": { "text":"棒グラフ" }, "elements":[ { "type":"bar_filled", "colour":"#3373CC", "outline-colour":"#3373AC", "values":[8,8,1,7,4,8,1,10,7,1,8,5] } ], "x_axis": { "labels": { "labels":[ { "text":"北海道札幌市", "rotate":"45" }, { "text":"青森県青森市", "rotate":"45" }, { "text":"岩手県盛岡市", "rotate":"45" }, { "text":"宮城県仙台市", "rotate":"45" }, { "text":"秋田県秋田市", "rotate":"45" }, { "text":"山形県山形市", "rotate":"45" }, { "text":"福島県福島市", "rotate":"45" }, { "text":"茨城県水戸市", "rotate":"45" }, { "text":"栃木県宇都宮市", "rotate":"45" }, { "text":"群馬県前橋市", "rotate":"45" }, { "text":"埼玉県さいたま市", "rotate":"45" }, { "text":"千葉県千葉市", "rotate":"45" }] }, "colour":"#898989", "grid-colour":"#EEEEEE" }, "y_axis": { "colour":"#898989", "grid-colour":"#EEEEEE" }, "bg_colour":"#FFFFFF" - }
ということで、日本語が表示できないと困っている方いましたら試してみてください。
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













ありがとうございました!
ただ、かなりswfのサイズが大きくなってしまい(3MB)読み込みが遅く、使い物にならないくらいですね。。。
何か解決作はないものでしょうかねぇ。。
そうなんですよね、フォントを埋め込むことになるのでファイルサイズが大きくなってしまうのが欠点です。。。
解決策の一つとしては使用する文字だけ埋め込むようにするという方法があるのですが、ラベルで表示する文字がこれとこれと決まっている場合のみその方法を使うと解決することができます。。。
もっとスマートな方法があれば良いんですけどね。。
使用する文字だけ埋め込む方法があるのですか!
常用漢字だけ埋め込めればそこそこ容量抑えられるかも・・・!?
少し調べてみます!ありがとうございました!
そのやり方を書きましたので、
http://blog.asial.co.jp/726
参考にしていただければと思います。
ありがとうございます!!
さっそく試してみたいと思いますm(_ _)m