【问题标题】:Check if font is embedded?检查字体是否嵌入?
【发布时间】:2014-08-09 18:22:00
【问题描述】:

我可以在创建 TextFormat/TextField 时检查我是否使用了 actual 字体吗?如果我指定未嵌入的字体或使用任何随机字符串,则不会显示任何文本,我也不知道为什么。

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);
    }
}

缺少嵌入行时不显示任何文本。

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

【问题讨论】:

    标签: actionscript-3 flash fonts embed


    【解决方案1】:

    您可以使用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;
    }
    

    然后像这样使用它:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2012-03-03
      相关资源
      最近更新 更多