来自动态加载的swf的嵌入字体无法识别

时间:2012-01-16 15:55:37

标签: flex4 embedded-fonts

我正在开发一个应用程序,它需要根据用户打开的给定文档中使用的字体动态加载字体。字体在RichEditableTextControl中使用,因此需要是CFF格式。

如果我添加代码:

[Embed(source="/assets/fonts/AvenirLTStd Book.otf",
fontFamily="EmbedAvenir LT Std 45 Book",
mimeType="application/x-font",
embedAsCFF="true")]
public const embeddedFont:Class;

到主SWF,然后文本显示正确的嵌入字体,但将代码移动到一个单独的文件,并根据我在以下链接中找到的信息添加加载器不加载字体 - http://www.scottgmorgan.com/blog/index.php/2007/06/18/runtime-font-embedding-in-as3-there-is-no-need-to-embed-the-entire-fontset-anymore/ < / p>

加载程序代码是:

private function loadFont(url:String):void {
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded);
    loader.load(new URLRequest(url));
}

private function fontLoaded(event:Event):void {
    var FontLibrary:Class = event.target.applicationDomain.getDefinition("FontAvenirLTStd") as Class;
    Font.registerFont(FontLibrary.embeddedFont);
}

Font.registerFont行抛出一个错误,表示传递的参数不能为null。我已经检查了调试模式,问题似乎是该类存在但没有任何内容。 FontLibrary类是实例化的,但调试器中唯一的子条目是_prototype,因此尝试访问embeddedFont属性确实返回undefined。

目前字体SWF位于主项目的assets文件夹中,因此我不认为应该有任何安全限制,正如我所说,SWF加载部分似乎有效。

阻碍我的诊断的一件事是,我不确定问题是字体SWF是否未正确创建且没有内容,或主应用程序无法加载它。任何有关至少能够缩小范围的帮助都将受到赞赏。

我很感激我能得到的所有帮助,因为我已经坚持这个问题一段时间了,这是应用程序的关键部分。

提前感谢所有人。

1 个答案:

答案 0 :(得分:1)

对于那些最终来自Google的人来说,只是一个简短的注释,问题是我设法从顶部块中的embeddedFont常量定义中丢失了 static 关键字。应该是public static const embeddedFont:Class;

希望这有助于某人。