Flex Fonts embedding
Часто флекс разработчики стоят перед дилемой: использовать или не использовать внедрение шрифтов. Использование внедренных шрифтов дает много выгод, таких как: не нужно иметь установленный шрифт на клиентской машине, можно использовать сглаживания, прозрачности, повороты и т д. Полный список бенефитов по ссылке выше. Недостаток один - сильно увеличивается размер приложения. В этой статье я постараюсь рассказать как добится компромиса - внедрить шрифты в отдельный ролик и подгружать его приложением.
Для начала создадим файл 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. Грузить шрифты лучше всего до того, как приложение начнет отрисовываться.
Это не решит самой большой проблемы включенных шрифтов - их размера. Чтоб включить поддержку одного китайского (хотя бы просто Chinese Simplified) - надо будет подгрузить более 6 метров.
Согласен, азиатские шрифты для европейца вещь нетривиальная. Я думаю китайцы не используют внедрение