FlexSDKでOpenTypeフォントを埋め込む方法
AS3 Projectで下記ソースを作成し、srcフォルダにDeFonteNormale.otfを配置後、ビルド&デバッグ実行。
package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; public class Main extends Sprite { [Embed(source = "DeFonteNormale.otf", fontName = "DeFonte", embedAsCFF="false")] private var font:Class; public function Main() { var tf:TextField = new TextField(); tf.embedFonts = true; tf.defaultTextFormat = new TextFormat("DeFonte", 24, 0x0); tf.autoSize = "left"; addChild(tf); tf.text = "windows"; } } }
transcodeエラーがでたら、src/直下にotfファイルを置いているか確認する。src/assetsとか../assets/とかに置いてたら、Embedのsourceをsrcディレクトリを基点にして相対パスで書けばいいのかもしれない。(元ファイルがないから変換できやんで、という意味か)。試したときに使ったフォントは、Defonte( http://www.ingofonts.de/ingofonts/fonts/freefonts.html ) - 英字のみ。日本語や半角数字は表示されない。
develop env: FlashDevelop 3.3.4 RTM for Microsoft.NET 2.0 Runtime / FlexSDK 4.1.0 ( FlashDevelop current version contains ) / Flash Player 10
その他環境
FlexSDK 3.5 MPL
-
-
- -
-
FlexSDK 3.5 Adobe
-
-
- -
-
font engine
一応、FlexSDK4.0以前のFontEngineであるAFE(Adobe Font Engine)でも、OpenTypeを限定的にサポートしているようだけれど、いまいち文意が読み取れない(http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_06.html)。システムフォントはsrc:localで、URL?フォントはsrc:urlとか書かれてる。
うーん。urlとlocalって、結局ファイルパスを指定してるから表面的な意味は同じじゃね?( http://livedocs.adobe.com/flex/3_jp/html/help.html?content=fonts_04.html )。 厳密なところ(ファイルパスとURIは概念が違う)とかはこの際どうでもいいんだけれど。全体的な視点では個別の利点があるかもしれないけれど、ロード時間の観点で見ると、どっちでも結果は同じかもしれず。んでも、Adobeのヘルプページに書かれてる方法(Embedでリソースを読み込んで、CSSで参照)が良く分からない。これが実現できてないと、urlでの指定って出来ないって事なのかな。よくわからん。
AdobeFlashCS5.5のFontEngineは何が使えるのか調べないとな。多分、Flex4.0で採用されてるCFFFontEngineとか普通に使えちゃうんじゃないかしら。そしたら余計な事考えなくて良い。