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" - }
ということで、日本語が表示できないと困っている方いましたら試してみてください。
コメント
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



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