Встроенный шрифт из динамически загруженного SWF не распознан - PullRequest
1 голос
/ 16 января 2012

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

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

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

1 Ответ

1 голос
/ 23 января 2012

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

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

...