Встроенный шрифт из динамически загружаемого swf не распознается

Я работаю над приложением, которому необходимо динамически загружать шрифты на основе шрифтов, используемых в данном документе, который открывает пользователь. Шрифты используются в 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/

Код загрузчика:

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 отображается ошибка, указывающая на то, что передаваемый параметр не может быть нулевым. Я проверил в режиме отладки, и проблема, похоже, в том, что класс существует, но не имеет содержимого. Создается экземпляр класса FontLibrary, но единственной дочерней записью в отладчике является _prototype, поэтому попытка доступа к свойству embeddedFont возвращает значение undefined.

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

Одна вещь, которая мешает моей диагностике, заключается в том, что я не уверен, что проблема в том, что SWF шрифта создается неправильно и не имеет содержимого, или если основное приложение не может его загрузить. Любая помощь по крайней мере в возможности сузить круг вопросов будет оценена.

Я был бы признателен за любую помощь, которую я могу получить в этом, поскольку я застрял в этой проблеме в течение некоторого времени, и это ключевая часть приложения.

Заранее всем спасибо.


person NColvert    schedule 16.01.2012    source источник


Ответы (1)


Небольшое замечание для всех, кто попадает сюда из Google. Проблема заключалась в том, что мне удалось потерять ключевое слово static из определения константы embeddedFont в верхнем блоке. Это должно было быть public static const embeddedFont:Class;

Надеюсь, это кому-то поможет.

person NColvert    schedule 22.01.2012