2012-01-16 1 views
1

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

Если добавить код:

[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 не создается правильно и не имеет содержимого или основное приложение не может его загрузить. Любая помощь, по крайней мере, в том, чтобы сузить это, будет оценена по достоинству.

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

Заранее благодарен всем.

ответ

1

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

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