Как использовать шрифты во внешних SWF-файлах - PullRequest
0 голосов
/ 16 ноября 2010

То, что я хотел бы сделать, - это гибкое приложение, в котором используются шрифты, доступные во внешнем SWF.До сих пор у меня получалось:

  • для создания класса AS, в котором содержится встроенный шрифт:

    package {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.

Буду признателен за любую помощь в этом вопросе.

Спасибо, Джеральд

1 Ответ

0 голосов
/ 24 апреля 2011

Может быть проблема с конфликтами имен классов. Я боролся с проблемой внешней загрузки шрифтов в течение нескольких часов. Оказалось, что мой класс шрифтов назывался «Main», как и приложение, которое пыталось его загрузить. Шрифт никогда не регистрировался правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...