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
      • -
Error: transcoding parameter 'embedAsCFF' is not supported by 'flex2.compiler.media.FontTranscoder' [Embed(source = "DeFonteNormale.otf", fontName = "DeFonte", embedAsCFF="false")]
FlexSDK 3.5 Adobe
      • -
Error: transcoding parameter 'embedAsCFF' is not supported by 'flex2.compiler.media.FontTranscoder' [Embed(source = "DeFonteNormale.otf", fontName = "DeFonte", embedAsCFF="false")]

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とか普通に使えちゃうんじゃないかしら。そしたら余計な事考えなくて良い。