2011年12月20日火曜日

AIRで外部埋め込みフォントを動的に読み込んで表示する時の原因不明の問題

先日はAIRで動的に埋め込みフォントを読み込んだ。

琴線探査: AIRで動的に埋め込みフォントを読み込むには?

こうして読み込んだフォントの表示に関して、ちと問題があったので書いておきたい。

AIRで埋め込みフォントを表示する方法は少なくとも4つある。

1.TextFieldを使う(embedAsCFFを使わない古い方法)
2.FTEを使う(embedAsCFF使用。少々面倒。)
3.SparkLabelを使う(embedAsCFF使用。一番シンプル。FTEを直接拡張。NOT TLF。)
4.RichTextなどのTLF系のコンポーネントを使う(embedAsCFF使用。少々面倒。)

1-3までは表示できたのだけど、4のTLF系での表示がどうしてもできない。コードはこんな感じ。

var fontSize:Number = 18;
var ui:UIComponent = new UIComponent();
addElement(ui);

//TextField
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.defaultTextFormat = new TextFormat("あくあフォント", fontSize);
tf.embedFonts = true;
tf.text = "embedAsCFFがfalseの外部埋め込みフォントをTextFiledで表示";
tf.y = 0;
ui.addChild(tf);

//FTE
var fd:FontDescription = new FontDescription("えれーな", "normal", "normal", FontLookup.EMBEDDED_CFF);
var ef:ElementFormat = new ElementFormat(fd, fontSize);
var te:TextElement = new TextElement("embedAsCFFがtrueの外部埋め込みフォントをFTEで表示", ef);
var tb:TextBlock = new TextBlock(te);
var tl:TextLine = tb.createTextLine(null, 600);
tl.y = 50;
ui.addChild(tl);

//SparkLabel
var label:Label = new Label();
label.text = "embedAsCFFがtrueの外部埋め込みフォントをSparkLabelで表示";
label.setStyle("fontLookup", FontLookup.EMBEDDED_CFF);
label.setStyle("fontSize", fontSize);
label.setStyle("fontFamily", "えれーな");
label.y = 50;
addElement(label);

//RitchText(外部埋め込みフォント)
var rt:RichText = new RichText();
rt.text = "embedAsCFFがtrueの外部埋め込みフォントをRitchTextで表示";
rt.setStyle("fontLookup", FontLookup.EMBEDDED_CFF);
rt.setStyle("fontSize", fontSize);
rt.setStyle("fontFamily", "えれーな");
rt.y = 75;
addElement(rt);

//RitchText(スタイルシート埋め込みフォント)
var rt2:RichText = new RichText();
rt2.text = "embedAsCFFがtrueのスタイルシートで埋め込んだフォントをRitchTextで表示";
rt2.setStyle("fontLookup", FontLookup.EMBEDDED_CFF);
rt2.setStyle("fontSize", fontSize);
rt2.setStyle("fontFamily", "StyleSheetEmbedFont");
rt2.y = 100;
addElement(rt2);

表示させると、こうなる。


外部埋め込みフォントをRitchTextで表示させた時だけデフォルトフォントで表示されている。一方、スタイルシート埋め込みのフォントをRitchTextで表示させた時は正常に表示できた。

今のところ原因は不明。またセキュリティー関連ではないかと思われるけれど、SparkLabelでは表示できてるし・・・

わーからん\(^o^)/オワタ