Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何在外部SWF文件中使用字体_Apache Flex - Fatal编程技术网

Apache flex 如何在外部SWF文件中使用字体

Apache flex 如何在外部SWF文件中使用字体,apache-flex,Apache Flex,我想做的是一个flex应用程序,它使用外部swf中可用的字体。 到目前为止,我取得的成功是: 要创建包含嵌入字体的AS类,请执行以下操作: 包装 { 导入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+003

我想做的是一个flex应用程序,它使用外部swf中可用的字体。 到目前为止,我取得的成功是:

  • 要创建包含嵌入字体的AS类,请执行以下操作:

    包装 { 导入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\u 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应用程序中,嵌入就会起作用。所以我猜我可能错过了一些编译选项

我正在使用AdobeFlashBuilder4

在这件事上,如果有任何帮助,我将不胜感激

谢谢,
Gerald可能是类名冲突的问题。我与外部字体加载问题搏斗了几个小时。事实证明,我的字体类被称为“Main”,试图加载它的应用程序也是如此。字体从未正确注册。

为什么要在外部swf中使用该字体?我需要在外部swf中使用该字体,因为最终会有许多字体文件可在我的应用程序中使用。并且只会使用其中的一小部分——这在运行时是可配置的,并且取决于用户将要做什么。在应用程序中嵌入所有字体并没有真正的意义,因为这个字体的大小会增长很多。