0

私はこれに関するアイデアを完全に使い果たしました。それは続き、私の以前の質問の一部です:

as3を使用してswfにフォントを埋め込む

flash.text.engine に埋め込みフォントを使用させることができないようです。注意: ユーザーが 2 つの言語を選択した後 (相互の翻訳用)、アプリケーションにフォントをロードする必要があります (swf に埋め込まれています)。SDK にある fontswf アプリケーションを使用する必要があることを示す情報が少しあるようです。これを試して読み込み可能なswfファイルを生成しましたが、これらがどのように読み込まれるかについての情報を見つけることができません(つまり、これらのswfにはクラスがないため、以下のgetDefinitionおよびregisterFontビットは機能しません)、text.engineに適用されますオブジェクト。埋め込みのソースは、上記の質問に対する私の回答にあります。これは、それがどのように機能しないかを示すテスト as3 です!

package 
{
import flash.display.Loader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.engine.ElementFormat;
import flash.text.engine.FontDescription;
import flash.text.engine.TextBlock;
import flash.text.engine.TextLine;
import flash.text.engine.TextElement;
import flash.net.URLRequest;
import flash.text.Font;

public class Main extends Sprite 
{
    private var loader:Loader;
    private var tl:TextLine;

    public function Main():void 
    {
        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,fontLoaded);
        loader.load(new URLRequest("EnglishF.swf"));
    }

    private function fontLoaded(evt:Event):void {
        var FontClass:Class
        FontClass = evt.target.applicationDomain.getDefinition("EnglishF") as Class;
        try {
            Font.registerFont(FontClass.myFont);
            trace("successfully loaded " + FontClass); 
            // gives 'successfully loaded EnglishF'
        } catch (err:Error) {}
        var fontList:Array = Font.enumerateFonts();
        for (var i:int = 0; i < fontList.length; i++) {
            trace(fontList[i].fontName, fontList[i].fontType); 
            // gives 'EnglishF embeddedCFF'
        }
        var block:TextBlock = new TextBlock();
        var font:FontDescription = new FontDescription("EnglishF");
        var formt:ElementFormat = new ElementFormat(font, 30);
        trace(FontDescription.isFontCompatible("EnglishF","normal","normal"), formt.fontDescription.fontName); 
        // gives 'true EnglishF'
        formt.color = 0x882233;
        var span:TextElement = new TextElement("Hello World. This is certainly NOT in the Font provided!", formt);
        block.content = span;
        tl = block.createTextLine();
        tl.x = 10;
        tl.y = tl.ascent + 10;
        addChild(tl);
    }
}
}

私は何か間違ったことをしていますか、それともこれは不可能ですか?

4

1 に答える 1

0

うまくいけば、これは役に立ちます。この行の下:

var font:FontDescription = new FontDescription("EnglishF");

次の行を追加します。

font.fontLookup = FontLookup.EMBEDDED_CFF;

これにより、テキスト フレームワークは、通常の埋め込みフォント (TextField で使用される) ではなく、CFF フォント (新しいテキスト フレームワークで使用される) を使用していることを認識します。

お役に立てれば。

ヨルダン

于 2013-01-16T20:27:21.247 に答える