Home > Flex, Air > Flex Fonts embedding

Flex Fonts embedding

January 5th, 2010

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

Для начала создадим файл fonts_to_embed.css со следующим содержимым:

@font-face {
src:url(‘../assets/font/verdana.ttf’);
fontFamily: VerdanaEmbed;
fontStyle: normal;
fontWeight: normal;
advancedAntiAliasing: true;
}
@font-face {
src:url(‘../assets/font/verdanab.ttf’);
fontFamily: VerdanaEmbed;
fontStyle: normal;
fontWeight: bold;
advancedAntiAliasing: true;
}
@font-face {
src:url(‘../assets/font/verdanai.ttf’);
fontFamily: VerdanaEmbed;
fontStyle: italic;
fontWeight: normal;
advancedAntiAliasing: true;
}

* This source code was highlighted with Source Code Highlighter.

Более подробная информация по синтаксису внедрения шрифтов здесь. mxmlc умеет компилировать css, пишем билд скрипт:

<project name=”Test” basedir=”.”>
<property file=”build.properties” />
<property name=”FLEX_HOME” value=”${flex.home}”/>
<taskdef resource=”flexTasks.tasks” classpath=”${flex.home}/ant/lib/flexTasks.jar” />
<property name=”mxmlc.bin” value=”${flex.home}/bin/mxmlc.exe” />

<target name=”main”>
<exec executable=”${mxmlc.bin}” failonerror=”true”>
<arg line=”/css/fonts_to_embed.css” />
<arg line=”-output ${deploy.dir}/MyFontsRuntime.swf” />
</exec>
</target>
</project>

* This source code was highlighted with Source Code Highlighter.

Выполняем, получаем MyFontsRuntime.swf, осталось его подгрузить:

private function init():void {
var fontsLoader:IEventDispatcher = StyleManager.loadStyleDeclarations(‘MyFontsRuntime.swf’);
fontsLoader.addEventListener(StyleEvent.COMPLETE, onFontsLoadingComplete);
}

* This source code was highlighted with Source Code Highlighter.

Все. Шрифты внедренные, размер приложения не увеличился.

PS. Грузить шрифты лучше всего до того, как приложение начнет отрисовываться.

Flex, Air

  1. WD
    January 28th, 2010 at 23:38 | #1

    Это не решит самой большой проблемы включенных шрифтов - их размера. Чтоб включить поддержку одного китайского (хотя бы просто Chinese Simplified) - надо будет подгрузить более 6 метров.

  2. admin
    February 2nd, 2010 at 10:45 | #2

    Согласен, азиатские шрифты для европейца вещь нетривиальная. Я думаю китайцы не используют внедрение

  1. No trackbacks yet.
31525 pages viewed, 36 today
17773 visits, 33 today
FireStats icon Powered by FireStats