我想做的是一个flex应用程序,它使用外部swf中可用的字体。 到目前为止我取得的成就是:
创建AS类帽子保存嵌入字体:
包 { import flash.display.Sprite;
public class _Arial extends Sprite
{
[Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E')]
public static var _MyArial:Class;
}
}
使用以下命令将其编译为swf:mxmlc.exe -static-link-runtime-shared-libraries=true _Arial.as
当我尝试从我的flex应用程序加载字体时,此操作失败并显示以下错误消息:
ArgumentError: Error #1508: The value specified for argument font is invalid.
at flash.text::Font$/registerFont()
at valueObjects::FontLoader/fontLoaded()[C:\Documents and Settings\nutrina\Adobe Flash Builder 4\flex_pdf\src\valueObjects\FontLoader.as:33]
这是我尝试加载SWF文件的代码:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.text.*;
import mx.collections.ArrayCollection;
import mx.core.FontAsset;
public class FontLoader extends Sprite {
public function FontLoader(url:String) {
super();
loadFont(url);
}
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 fontList:ArrayCollection = new ArrayCollection(Font.enumerateFonts(true));
var FontLibrary:Class = event.target.applicationDomain.getDefinition("_Arial") as Class;
trace("FontList: " + fontList)
trace("FontLibrary: " + FontLibrary)
trace("FontLibrary._Arial: " + FontLibrary._MyArial)
Font.registerFont(FontLibrary._MyArial);
fontList = new ArrayCollection(Font.enumerateFonts(true));
trace("Font list: " + fontList)
}
}
}
字体文件肯定没有损坏,因为如果我将上面代码中的_Arial类放入Flex应用程序中,嵌入就可以了。所以我的猜测是,我可能错过了一些编译选项?
我正在使用Adobe Flash Builder 4.
我很感激有关此事的任何帮助。
谢谢, 杰拉德
答案 0 :(得分:0)
可能是类名冲突的问题。我花了几个小时与外部字体加载问题搏斗。事实证明我的字体类被称为“Main”,试图加载它的应用程序也是如此。字体永远无法正确注册。