我正在开发一个应用程序,它需要根据用户打开的给定文档中使用的字体动态加载字体。字体在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是否未正确创建且没有内容,或主应用程序无法加载它。任何有关至少能够缩小范围的帮助都将受到赞赏。
我很感激我能得到的所有帮助,因为我已经坚持这个问题一段时间了,这是应用程序的关键部分。
提前感谢所有人。
答案 0 :(得分:1)
对于那些最终来自Google的人来说,只是一个简短的注释,问题是我设法从顶部块中的embeddedFont常量定义中丢失了 static 关键字。应该是public static const embeddedFont:Class;
希望这有助于某人。