检查字体是否嵌入?

Bit*_*lue 3 embed flash fonts actionscript-3

我可以在创建/ 时检查我是否使用实际字体?如果我指定一个非嵌入字体或使用任何随机字符串,则不显示任何文本,我不知道为什么.TextFormatTextField

import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

public class SimpleSprite extends Sprite
{
    //[Embed(source="C:/Windows/Fonts/Arial.ttf",fontName="default_font",mimeType="application/x-font",fontWeight="normal",fontStyle="normal",advancedAntiAliasing="true",embedAsCFF="false")]
    //private static var defaultFont: String;

    public function SimpleSprite()
    {
        var t: TextField = new TextField;
        t.autoSize = TextFieldAutoSize.LEFT;
        t.defaultTextFormat = new TextFormat("default_font", 16, 0xff0000);
        t.embedFonts = true;
        t.text = "hello world";
        addChild(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

缺少嵌入行时,它不显示任何文本.

重要提示:我创建TextFields的包没有嵌入任何内容,我希望保持这种方式.嵌入必须由使用该包的程序员完成.我想检查字体是否嵌入,如果没有则抛出错误.

net*_*eet 5

您可以使用Font.enumerateFonts哪个将返回array可用的嵌入字体.您可以使用它来创建如下所示的函数:

private function hasEmbeddedFont(fontName:String):Boolean
{
    var fonts:Array = Font.enumerateFonts();
    for each(var font:Font in fonts)
    {
        if (font.fontName == fontName)
        {
            return true;
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它像这样:

t.autoSize = TextFieldAutoSize.LEFT;
t.defaultTextFormat = new TextFormat("default_font", 16, 0xff0000);
t.embedFonts = hasEmbeddedFont("default_font");
t.text = "hello world";
Run Code Online (Sandbox Code Playgroud)

如果您正在构建供其他人使用的库,您可以考虑将其抽象为您自己的自定义子类,TextField以便全部自动处理.