Развитие сервис-ориентированного клиента на платформе Flash Player.
Работа со шрифтами
Материал из Flexipedia
[править] Использование шрифтов [637]
Эта глава описывает, как использовать шрифты в вашем Adobe Flex приложении. Несмотря на то, что легче использовать системные шрифты, вы можете внедрять и другие шрифты, для того чтобы применять спецэффекты к текстовым виджетам, такие как поворот или затухание. Эта глава описывает различия между системными шрифтами и внедренными шрифтами. Также описывает, как эффективно внедрять двухбайтные шрифты. И показывает несколько способов как вы можете внедрить шрифты в ваши Adobe Flex приложения, от использования Каскадных Таблиц Стилей ( CSS ) для использования FlashType шрифтов которые внедрены во внешний SFW файл.
[править] О шрифтах [637]
Когда вы компилируете приложение Flex, оно будет хранить имена шрифтов, которые вы использовали для создания текста. Adobe Flash Player 9 использует имена шрифтов чтобы эти или похожие шрифты в системе пользователя когда приложение Flex будет запущенно. Также вы можете внедрять шрифты в приложение Flex для того чтобы быть уверенным что будет использоваться нужный шрифт, даже если на пользовательской системе не будет установлен такой шрифт.
Вы определяете шрифт который будет отображаться в каждом из компонент используя свойство стиля fontFamily. Вы можете задать это свойство во внешнем CSS файле, в блоке <mx:Style>, или линейно.
Это свойство может принимать список шрифтов, как на примере ниже:
.myClass
{
fontFamily: Arial, Helvetica;
color: Red;
fontSize: 22;
fontWeight: bold;
}
Если клиентская система не имеет в себе первого шрифта из списка, Flash Player будет искать второй, и так далее, до тех пор пока не найдет шрифт которых подходит. Если шрифт не подходит, Flash Player выбирает наиболее подходящий шрифт из пользовательской системы.
Шрифты являются наследуемыми свойствами в стилях. Так что, если вы установите тип шрифта на контейнер, все виджеты внутри контейнера наследуют это значение, как на примере ниже:
<?xml version="1.0" encoding="iso-8859-1"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > <mx:Style> Application { fontFamily: Helvetica; fontSize: 18pt; } </mx:Style> <mx:Button label="Click Me" id="b1" /> <mx:Label id="l1" text="Label" /> <mx:TextArea width="400" height="75" id="ta1" text="The text in this control uses the Helvetica font." /> </mx:Application>
Этот пример задает селектору типа Application размер шрифта (fontSize). Flex применяет этот стиль ко всем виджетам внутри Application, которые поддерживают свойство стиля fontSize, в данном случае это виджеты Button, Label и TextField.
[править] Использование системных шрифтов [638]
Наиболее безопасно при определении набора шрифтов, это включать в конец списка системные шрифты. Системные шрифты не экспортируют структурную информацию о шрифте и не внедряются в SFW файл. Поэтому Flash Player будет использовать какой-либо системный шрифт на локальном компьютере, который будет наиболее подходящим.
Следующий пример задает системный шрифт _sans, для того чтобы Flash Player его использовал, в случае если не обнаружит другие шрифты в системе пользователя:
.myClass
{
fontFamily: Arial, Helvetica, "_sans";
color: Red;
fontSize: 22;
fontWeight: bold;
}
Вы должны заключать имена системных шрифтов в кавычки когда задаете их при помощи CSS.
Flash Player поддерживает три системных шрифта. Таблица ниже описывает эти шрифты:
| Имя шрифта | Описание | |
| _sans | Системный шрифт _sans это тип шрифта sans-serif; например, Helvetica или Arial. | |
| _serif | Системный шрифт _serif это тип шрифта serif; Например, Times Roman. | |
| _typewriter | Системный шрифт _ typewriter это моноширинные шрифты; Например, Courier. |
Использование системных шрифтов не влияет на размер SWF файла, потому как шрифты находятся на клиенте. Однако, использование системных шрифтов может отразится на производительности приложения, потому как это требует чтобы Flash Player взаимодействовал с локальной операционной системой. Так же, если вы используете только системные шрифты, ваш выбор ограничен только тремя шрифтами.
[править] Использование внедренных шрифтов [639]
Вместо того чтобы полагаться на клиентский компьютер, который может быть будет иметь шрифты, которые вы указали, вы можете внедрить TrueType шрифты в ваше Flex приложение. Это означает, что шрифт будет всегда доступен для Flash Player во время того, как приложение будет запущенно, и вы не должны будете думать про то, как заменится отсутствующий шрифт.
Внедренные шрифты имеют следующие преимущества:
- Клиентское окружение не требуется в установке шрифтов.
- Внедренные шрифты сглажены (anti-aliased), что означает, что их грани сглажены
для более легкого чтения. Это особенно заметно, когда размер шрифта большой. - Внедренные шрифты могут быть частично или полностью прозрачны.
- Внедренные шрифты можно вращать.
- Внедренные шрифты предоставляют плавное проигрывание во время зуммирования.
- Текст будет выглядеть точно таким каким вы его задавали в процессе разработки.
Однако использование внедренных шрифтов не всегда лучшее решение. Внедренные шрифты имеют следующие ограничения и недостатки:
- Вы можете внедрять только TrueType (ttf) шрифты.
- Внедренные шрифты увеличивают размер вашего приложения, потому что, приложение
должно будет содержать описание шрифтов для отображения текста.
Результатом этого может стать увеличение времени для загрузки пользователем вашего приложения. - Внедренные шрифты уменьшают разборчивость для размеров шрифта менее 10 пунктов. Все внедренные шрифты используют сглаживание для отображения на экране пользователя. И как результат, шрифты могут выглядеть странно или трудными для чтения на малых размерах шрифта.
Обычно вы используете CSS для внедрения шрифтов во Flex приложение. Вы должны использовать объявление @font-face для определения исходного файла для внедрения шрифта, и затем задаете имя для шрифта используя свойство fontFamily. Вы должны определить объявление @font-face для каждого начертания шрифта. Исходный файл может быть локальным JRE шрифтом или один из шрифтов доступных, используя ваши настройки путей. Вы используете заданное вами имя шрифта в вашем MXML коде, для того чтобы ссылаться на внедренный шрифт.
Проверьте лицензии по использованию каждого шрифта, прежде чем его внедрять в ваше приложение. Шрифты могут иметь ограничения по использованию в своих лицензиях.
Если вы пытаетесь внедрить шрифт, который не может быть найден Flex компилятором, Flex выдаст сообщение об ошибке и не произведет компиляцию вашего приложения.
Вы можете внедрять шрифты которые могут быть как отдельные TTF файлы так и внедренными в SWF файл который вы сделали при помощи Macromedia Flash. Шрифты внедренные во Flash имеют преимущество FlashType технологии, которая делает шрифты более читабельными при малых размерах. Для более детальной информации о внедрениеи FlashType шрифтов в ваши приложения, смотрите Внедрение FlashType шрифтов.
[править] Синтаксис внеднерия шрифтов [640]
Чтобы внедрить TrueType шрифты, используйте следующий синтаксис в ваших таблицах стилей или внутри тэга <mx:Style>:
@font-face
{
src: url("location") | local("name");
fontFamily: alias;
[fontStyle: italic | oblique | normal;]
[fontWeight: bold | heavy | normal;]
}
Следующий пример внедряет шрифт с именем Bold Akbar:
@font-face
{
src: url("akbarb.ttf");
fontWeight: bold;
fontFamily: myFontBold;
}
После того как вы внедрите шрифт используя декларацию @font-face, вы можете использовать новое имя шрифта в свойстве fontFamily, или алиас, на тип или селектор класса. Следующий пример использует внедренный шрифт myFontBold как селектор типа для виджета Label:
Label
{
fontFamily: myFontBold;
fontWeight: bold;
}
Также вы можете применять новый шрифт линейно, как на примере ниже:
<mx:Label text="This is my label" fontFamily="myAkbar" fontWeight="bold" />
В этом определении, вы задаете каким будет шрифт жирным или наклонным, используя свойства fontWeight и fontStype. Для жирного начертания, вы можете установить fontWeight равное bold или целому числу большее или равное 700. Вы можете задать fontWeight равным plain или normal для не жирного начертания шрифта. Для наклонного начертания, вы можете задать fontStyle равным italic или oblique. Вы можете задать значение для fontStyle равное normal или plain, для ненаклонных начертаний. Если вы не зададите fontWeight или fontStyle, Flex воспримет внедренный шрифт как шрифт с обычным начертанием. Вы также можете задавать много других свойств для шрифта, такие как fontSize, в этот селектор, так же как бы вы добавляли их в селектор шрифта.
[править] Размещение внедренных шрифтов [641]
Атрибут src в декларации @font-face определяет расположение для fontFamily. Вы можете задать или url или локальную функцию. Таблица приведенная ниже описывает эти функции:
| Аттрибут | Описание | |
| url | Внедряет указанный TrueType шрифт, по заданному URI. URI может быть относительным (например, ../fontfolder/akbar.ttf) или абсолютным (например, c:/myfonts/akbar.ttf). | |
| local | Внедряет TrueType шрифт, который может быть доступен локально по имени, а не по пути. Вы используете имя шрифта, а не имя файла. Например, вы задаете “Akbar Bold Italic” вместо “AkbarBI.ttf”. Вы можете внедрить шрифт, который может быть доступен при помощи серверного Java Runtime Environment (JRE). Эти шрифты состоят из *.ttf файлов в папке jre/lib/fonts, шрифты которые прописаны в файле настроек jre/lib/font.properties, и шрифты которые доступны для JRE из операционной системы (OС). В Windows, TTF файлы из папки /windows/fonts ( или /winnt/fonts) также доступны для функции local. В Solaris или Linux, шрифты регистрируемые при помощи сервера шрифтов, такого как xfs, также доступны. Имя шрифта, которое вы задаете, определяется операционной системой. В основном, вы не включаете расширение файла шрифта, но это приводит к зависимости к OC. Для более детальной информации, смотрите документацию к вашей операционной системе |
Вы должны задать url или локальную функцию в дескриптор src в декларации @font-face. Все остальные дескрипторы являются не обязательными. В основном, следует использовать url вместо local, потому как указывание на файл более надежно, чем ссылка, контролируемая операционной системой.
Не смешивайте внедренные и не внедренные шрифты в дескрипторе для одного семейства (fontFamily).
[править] Внедрение шрифтов при помощи ActionScript [642]
Вы можете внедрять TTF шрифты или системные шрифты по пути к файлам или имени шрифта, используя метатэг [Embed] в ActionScript. Чтобы внедрить шрифт по пути к файлу, вы должны использовать свойство source. Чтобы внедрить шрифт по имени шрифта, используйте свойство systemFont.
Следующий пример внедряет шрифт по пути к файлу и по имени шрифта использую синтаксис тэга [Embed]:
[as3]
// Внедрение шрифта по пути к файлу.
[Embed( source='myfont.ttf', fontName='foo' mimeType='application/x-font' )]
var myfont : Class;
// Внедрение шрифта по имени. [Embed( systemFont='Helvetica', fontName='foo' mimeType='application/xfont' )] var helv : Class;
Используйте значение свойства fontName, которое вы задаете в тэге [Embed] как алиас в определении стилей.
Следующий пример внедряет два шрифта: один используя метатэг [Embed], а второй используя декларацию @font-face. Этот пример находит файл по пути, что есть предпочтительней, чем по имени шрифта. В обоих случаях, шрифт находится в папке ../assets. Чтобы показать вам что внедрение произошло успешно к виджету Label будет применено вращение. Если шрифт не был корректно внедрен, текст исчезнет при вращении виджета.
<?xml version="1.0" encoding="iso-8859-1"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="rotateLabels()" > <mx:Script> <![CDATA[
[as3]
[Embed( mimeType='application/x-font', source='../assets/BELLB.TTF', fontName='myBellFont', fontWeight='bold' )]
// Эта переменная не используется. Она создается для того чтобы компилятор смог прилинковать шрифт.
private var myFontClass : Class;
public function rotateLabels () : void {
lbl1.rotation = 45; lbl2.rotation = 45;
}
]]>
</mx:Script>
<mx:Style>
@font-face
{
fontFamily: myArial;
src: url( "../assets/arial.ttf" );
font-style: "normal";
}
.mystyle1
{
fontFamily: myArial;
fontSize: 32pt;
}
.mystyle2
{
fontFamily: myBellFont;
fontSize: 32pt;
fontWeight: bold; //Должно быть заданно, так как это шрифт с жирным начертанием.
}
</mx:Style>
<mx:Label id ="lbl1" styleName="mystyle1" text="Should be Arial" />
<mx:Label id ="lbl2" styleName="mystyle2" text="Should be Bell" />
</mx:Application>
Вы можете определить подмножество шрифта для внедрения, используя параметр unicodeRange в метатеге [Embed] или в декларации @font-face. Следующий пример внедряет диапазон символов Unicode между 0020 и 007E шрифта myfont.ttf используюя метатег [Embed]:
[as3]
[Embed( source='myfont.ttf', fontName='foo' unicodeRange='U+0020-U+007E' )]
var myfont : Class;
Для более детальной информации, смотрите Определение диапазона символов.
[править] Определение внедренных шрифтов [643]
Вы можете использовать метод isFontFaceEmbedded() класса SystemManager, для определения внедрен ли шрифт или зарегистрирован ли он при помощи метода register() у класса Font. Метод принимает один аргумент: объект, который описывает TextFormat шрифта; и возвращает Boolean значение, которое отображает, был ли шрифт внедрен. Следующий пример проверяет, был ли шрифт внедрен:
<?xml version="1.0">
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="determineIfFontFaceIsEmbedded()">
<mx:Style>
@font-face
{
src: url( assets/sketchy.ttf );
fontFamily: "Sketchy";
}
.myStyle1
{
fontFamily: "Sketchy";
fontSize: 12pt;
}
</mx:Style>
<mx:Script>
<![CDATA[
[as3]
import mx.managers.SystemManager;
import flash.text.TextFormat;
public function determineIfFontFaceIsEmbedded():void
{
var tf1 : TextFormat = new TextFormat();
tf1.font = "Sketchy";
var tf2 : TextFormat = new TextFormat();
tf2.font = "Arial";
var b1 : Boolean = Application.application.systemManager.isFontFaceEmbedded( tf1 );
var b2 : Boolean = Application.application.systemManager.isFontFaceEmbedded( tf2 );
ta1.text = "isFontFaceEmbedded ( Sketchy ): " + b1;
ta1.text += "isFontFaceEmbedded ( Arial ): " + b2;
}
]]>
</mx:Script>
<mx:Text id="text1" styleName="myStyle1" text="Sketchy"/>
<mx:Button label="Rotate +1" click="++text1.rotation;"/>
<mx:Button label="Rotate -1" click="--text1.rotation;"/>
<mx:TextArea id="ta1" height="200" width="400" text=""/>
</mx:Application>
Вы можете использовать метод enumerateFonts () класса Font, чтобы вывести информацию о системных или внедренных шрифтах. Следующий пример выводит список внедренных шрифтов и их гарнитуры:
[as3]
var fontArray : Array = Font.enumerateFonts( false );
for( var i:int = 0; i < fontArray.length; i++ ) {
var thisFont : Font = fontArray[i]; trace( "name: " + thisFont.fontName ); trace( "typeface: " + thisFont.fontStyle );
}
В консоли отобразится:
name: Century Gothic typeface: regular name: Century Gothic typeface: bold name: Century Gothic typeface: boldItalic
Метод enumerateFonts() принимает один Boolean аргумент: enumerateDeviceFonts. Значение аргумента enumerateDeviceFonts по умолчанию равно false, что означает что метод вернет массив внедренных шрифтов по умолчанию.
Если вы передадите аргумент enumerateDeviceFonts равный true, то метод enumerateFonts() вернет массив доступных системных шрифтов в системе клиента, но только если файл mms.cfg на клиентской стороне устанавливает значение DisableDeviceFontEnumeration равным 0. По умолчанию DisableDeviceFontEnumeration равно 1, поэтому Flash Player не может вывести список системных шрифтов на компьютере клиента, до тех пор, пока конфигурационный файл на стороне клиента не разрешит это. Для более детальной информации о конфигурировании клиентской стороны при помощи mms.cfg, смотрите в документации по Flash Player.
[править] Использование нескольких гарнитур [645]
Большинство шрифтов имеют четыре стиля гарнитур: plain, boldface, italic и bold-italic ( обычный, жирный, курсив и жирный-курсив ). Вы можете внедрять любое количество гарнитур в ваше Flex приложение. Если вы внедрите только жирную гарнитуру в ваше приложение, вы не сможете использовать нормальную гарнитуру до тех пор пока вы не внедрите и ее. Для каждой из гарнитур которые вы будете использовать, вы должны будете добавлять новую декларацию @font-face в ваши таблицы стилей.
Некоторые виджеты Flex, такие как Button, используют жирную гарнитуру по умолчанию. Если вы используете внедренный шрифт для надписи на виджете Button, вы должны внедрить для вашего шрифта гарнитуру с жирным начертанием.
Следующий пример внедряет жирное и нормальное начертание шрифта Akbar:
[css]
@font-face
{
src: url("akbar.ttf");
fontFamily: myFont;
}
@font-face
{
src: url("akbarb.ttf"); /* Обратите внимание, что другое имя шрифта для жирного начертания. */
fontWeight: bold;
fontFamily: myFont; /* Обратите внимание, что алиас тот же самый. /*
}
Затем, вы определяете два селектора для шрифта, используя одинаковые алиасы в fontFamily, один для жирного начертания другой для нормального:
[css]
.mystyleEmbed1
{
fontFamily: myFont;
fontWeight: normal;
}
.mystyleEmbed2
{
fontFamily: myFont;
fontWeight: bold;
}
В этом примере, вы используете внедренные шрифты, через применение селекторов классов к вашим виджетам; на пример:
<mx:Label styleName="mystyleEmbed1" text="This font is normal" /> <mx:Label styleName="mystyleEmbed2" text="This font is bold" />
Также жирное начертание для виджета можно применить линейно, как на примере ниже:
<mx:Style>
@font-face
{
src: url("akbar.ttf");
fontFamily: myFont;
}
@font-face
{
src: url("akbarb.ttf");
fontWeight: bold;
fontFamily: myFont;
}
.mystyleEmbed1
{
fontFamily: myFont;
}
</mx:Style>
<mx:Label styleName="myFont" text="This font is normal" />
<mx:Label styleName="myFont" fontWeight="bold" text="This font is bold" />
Flex так же поддерживает использование HTML тэгов b и i в текстовых виджетах, таких как Label, для того чтобы применить жирное или курсивное начертание шрифта к тексту.
Если вы хотите использовать жирно-курсивное начертание шрифта, шрифт должен иметь два раздельных начертания. Вы задаете оба дескриптора ( fontWeight и fontStyle ) в @font-face и в блоке селектора, как на примере ниже:
[css]
@font-face
{
src: url("GOTHICBI.TTF");
fontStyle: italic;
fontWeight: bold;
fontFamily: myFont;
}
.myStyleBoldItalic
{
fontFamily: myFont;
fontWeight: bold;
fontStyle: italic;
fontSize: 98;
}
По умолчанию, Flex включает весь набор символов в каждый шрифт который внедряется в приложение, поэтому вам стоит ограничивать количество шрифтов которое вы собираетесь внедрять в ваше приложение, чтобы уменьшить его размер. Вы можете ограничить размер набора символов у шрифта, определением диапазона для шрифта.
Для более детальной информации, смотрите Определение диапазона символов.
[править] О менеджере шрифтов [647]
Flex содержит в себе по умолчанию два менеджера шрифтов. Они используют определения внедренных TrueType шрифтов и отрисовывают каждый символ во Flash Player. Два менеджера шрифтов это Batik и JRE, представлены классами BatikFontManager и JREFontManager, соответственно. Менеджер шрифтов Batik ограничен, потому что он не может использовать локальные шрифты; но, в основном, он предоставляет более сглаженное отображение и более точную метрику строк (что влияет на расчеты для много строчного теста и длины строки). Локальные шрифты, доступны при помощи операционной системы. Фонт менеджер JRE, с другой стороны, имеет доступ к локальным шрифтам используемые в ОС, но качество вывода шрифтов, в основном низкое.
В flex-config.xml вы можете выбрать какой из менеджеров шрифтов вы будете использовать. По умолчанию выбраны оба, как на примере ниже:
[xml]
<fonts> <managers> <manager-class>flash.fonts.JREFontManager</manager-class> <manager-class>flash.fonts.BatikFontManager</manager-class> </managers> </fonts>
Преимущество элементов <manager> идет в обратном порядке. Это означает, что по умолчанию менеджеру шрифтов Batik отдается предпочтение. Тем не менее Batik не поддерживает системные шрифты, поэтому менеджер шрифтов JRE так же доступен для того чтобы обрабатывать эти ситуации.
[править] Определение диапазона символов [647]
Ограничение диапазона символов входящих в начертание внедренного шрифта, вы уменьшаете его размер. Каждый символ в шрифте должен описываться; если вы удалите некоторые из этих символом, это уменьшит общий размер, описывающий шрифт информации, которую Flex должен будет содержать для каждого внедренного шрифта.
Вы можете установить диапазон знаков в файле flex-config.xml или в декларации font-face каждого MXML файла. Вы задаете единичные символы или диапазон символов, используя Unicode значения необходимых символов, так же вы можете определять несколько диапазонов символов для каждой декларации шрифта. Если вы используете символ вне заданного диапазона, Flex не отобразит его.
Техника, описанная в этой главе, сфокусирована на установку диапазон символом во Flex приложении. Тем не менее, если вы внедряете FlashType шрифта в ваше Flex приложение, вы можете указать диапазон во Flash. Для более детальной информации, смотрите Внедрение FlashType шрифтов. Для более детальной информации о диапазонах символов, смотрите спецификацию CSS-2 Fonts на http://www.w3.org/TR/1998/REC-CSS2-19980512/fonts.html#descdef-unicode-range.
[править] Определение диапазона символов в описании гарнитуры (font-face) [648]
Вы можете установить диапазон допустимых символов в MXML файле, используя атрибут unicode-range в декларации font-face. Пример ниже внедряет шрифт Akbar и определяет диапазон символом для него внутри тэга <mx:Style>:
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Style> @font-face { fontFamily: akbar; src: local("akbar"); unicode-range: U+0020-U+0040, /* Симолы пунктуации, Цифры и Символы */ U+0041-U+005A, /* Верхний регистра A-Z */ U+005B-U+0060, /* Символы пунктуации и Символы */ U+0061-U+007A, /* Нижний регистра a-z */ U+007B-U+007E; /* Символы пунктуации и Символы */ } TextArea { fontFamily: akbar; } </mx:Style> <mx:TextArea text="This is My Text Area"/> </mx:Application>
[править] Определение диапазонов в flex-config.xml [648]
Вы можете определить язык и диапазон символов для внедренных шрифтов в файле flex-config.xml, используя тэг <language-range>. Это позволит вам определить необходимый диапазон один раз, и использовать его во всех блоках @font-face. На примере ниже созданы именование диапазоны englishRange и otherRange, в файле flex-config.xml:
[xml]
<fonts>
<language-range> <lang>englishRange</lang> <range>U+0020-U+007E</range> </language-range> <language-range> <lang>otherRange</lang> <range>U+00??</range> </language-range>
</fonts>
В вашем MXML файле, вы указываете на заданные диапазоны используя атрибут Unicode-range в декларации @font-face, как на примере ниже:
[css]
@font-face
{
fontFamily: Excelsior;
src: local("akbar");
unicode-range: "englishRange";
}
Flex содержит в себе файл в котором перечислены подходящие наборы диапазонов, из Flash UnicodeTable.xml диапазона символов для использования в конфигурационном файле Flex. Для Adobe Flex Data Services, файл размещен в flex_app_root/WEB-INF/flex/flash-unicode-table.xml; для Adobe Flex SDK, файл размещен в flex_install_dir/frameworks/flash-unicode-table.xml.
Данный пример отображает преопределенный диапазон Latin 1:
[xml]
<language-range>
<lang>Latin I</lang> <range>U+0020,U+00A1-U+00FF,U+2000-U+206F,U+20A0-U+20CF,U+2100-U+2183</range>
</language-range>
Для того чтобы сделать диапазоны перечисленные в flash-unicode-table.xml, доступным в ваших Flex приложениях, скопируйте эти диапазоны в ваши flex-config.xml файлы.
[править] Определение доступных диапазонов [649]
Вы можете использовать класс Font, для того чтобы определить доступные символы в шрифте. Это можно сделать при помощи метода hasGlyphs().
Пример ниже, внедряет два шрифта и ограничивает их диапазон символов. Первый шрифт будет содержать только буквы A и B. Второй шрифт будет содержать все 128 символов из блока Basic Latin.
<?xml version="1.0" encoding="iso-8859-1"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="checkCharacterSupport();"> <mx:Style>[css] @font-face { font-family: myKiesling; src: url("assets/kiesling.ttf"); /* Оораничиваем диапазон двумя буквами A и B. */ unicode-range: U+0041-U+0042; } @font-face { font-family: myKramer; src: url("assets/kramer.ttf"); /* Устанавливаем диапазон в 128 символов из блока Basic Latin. */ unicode-range: U+0041-U+007F; }</mx:Style> <mx:Script> <![CDATA[[as3] public function checkCharacterSupport () : void { var fontArray : Array = Font.enumerateFonts( false ); for ( var i:int = 0; i < fontArray.length; i++ ) { var thisFont : Font = fontArray[i]; if ( thisFont.hasGlyphs( "DHARMA" ) ) { trace( thisFont.fontName + " supports these glyphs" ); } else { trace( thisFont.fontName + " does not support these glyphs" ); } } }]]> </mx:Script> </mx:Application>
[править] Внедрение двуxбайтных шрифтов [650]
При использовании двухбайтных шрифтов во Flex, вам следует внедрить наиболее меньший набор символов. Если вы внедрите все символы шрифта, размер SWF файла вашего приложения может быть очень большим. Вы можете ограничить количество символов в файле flex-config.xml, и затем ссылаться на имя нужного диапазона в декларации @font-face.
Flex предоставляет предопределенный набор диапазона символов для популярных двухбайтных шрифтов для языков, таких как Thai, Kanjii, Hangul, и Hebrew в файле flash-unicode-range.xml. Этот файл не обрабатывается во Flex, но он содержит в себе готовые наборы различных диапазонов, которые вы можете использовать. Например, следующий диапазон символов для Thai, содержащийся в файле flash-unicode-table.xml:
[xml]
<language-range>
<lang>Thai</lang> <range>U+0E01-U+0E5B</range>
</language-range>
Для того чтобы использовать этот язык в вашем Flex приложении, скопируйте этот диапазон символов в файл flex-config.xml или передайте его в командной строке, используя опцию fonts.languages.languages-range.
Добавьте полное определение как потомок тэга <languages>, как на примере ниже:
[xml]
<flex-config>
<fonts> <languages> <language-range> <lang>thai</lang> <range>U+0E01-U+0E5B</range> </language-range> </languages> </fonts> ...
</flex-config>
Вы можете изменять значения элементов <lang> на любой. Когда вы внедряете шрифт используя CSS, вы ссылаетесь на язык используя значение свойства unicode-range в декларации @font-face, как на примере ниже:
[css]
@font-face
{
fontFamily: "Thai_font";
src: url("THAN.TTF"); /* внедряем из файла */
unicode-range: "thai";
}
[править] Внедрение FlashType шрифтов [651]
FlashType это новый способ отображения текста в Macromedia Flash 8 от Adobe, который предоставлял чистое, высококачественное отображение текста в SWF файлах. FlashType сильно увеличил читаемость текста, особенно когда отображались шрифты с маленьким кеглем.
Эта глава описывает как внедрять FlashType шрифты в ваши Flex приложения.
[править] О внедрении FlashType шрифтов [651]
Вы можете использовать FlashType шрифты во Flex. Для этого, вы создаете SWF файл в среде Flash 8, который будет содержать шрифты, которые вам нужно. Затем, ссылаясь на шрифты, которые содержит этот SWF файл, для того чтобы внедрить их к себе в приложение.
Использование FlashType шрифтов, могут вызвать небольшую задержку во время загрузки SWF файлов. Вы заметите эту задержку, особенно тогда, когда будете использовать несколько разных наборов символов, поэтому будьте внимательны к количеству шрифтов которые вы будете использовать. Отображение FlashType шрифтов так же может вызвать увеличение использования памяти в Flash Player. Использование четырёх или пяти шрифтов, к примеру, могут вызвать увеличение потребляемой памяти примерно на 4 MB.
Когда вы внедряете FlashType шрифты в ваше Flex приложение, они функционируют точно так же как и все другие внедренные шрифты. Они сглажены, вы можете вращать их, их можно делать полностью или частично прозрачными.
В основном, вы должны внедрять четыре основных начертания для каждого шрифта, который вы хотите внедрить (обычный, жирный, курсив и жирный-курсив). Вам следует делать это, даже если шрифт, который вы внедряете, не имеет отдельного файла, для каждого начертания. Причина этому, это то, что некоторые виджеты во Flex не всегда используют обычное начертание.
Например, надпись на виджете Button использует жирное начертание шрифта. Если вы не внедрите жирное начертание, и примените ваш шрифт к надписи на виджете Button, то он не будет отображен, так как виджет Button использует жирное начертание.
[править] О свойствах стиля FlashType [652]
Есть четыре свойства стиля используемые шрифтами FlashType: fontAntiAliasType, fontGridFitType, fontSharpness, и fontThickness. И все наследуемые стили, и их значения по умолчанию, определенные для глобального селектора.
Следующая таблица описывает эти свойства:
| Свойство стиля | Описание | |
| fontAntiAliasType | Устанавливает свойство antiAliasType для внутренних текстовых полей. Правильные значения, это normal и advanced. Значение по умолчанию advanced, которое разрешает отрисовку FlashType, при использовании встроенного FlashType шрифта. Устанавливайте значение свойства в normal, для отключения отрисовки FlashType для FlashType шрифтов. Это свойство стиля не влияет на системные шрифты. | |
| fontGridFitType | Устанавливает свойство gridFitType для внутренних текстовых полей. Правильные значения это, none, pixel, и subpixel. Значение по умолчанию – pixel. Для более детальной информации, смотрите классы TextField и GridFitType в справочнике по языку Adobe Flex 2. Это свойство имеет такой же эффект как и свойство gridFitType у виджета TextField, только оно применяется тогда когда вы используете внедренные FlashType шрифты. Изменение значения этого свойства не будет иметь эффекта, пока вы не установите свойство fontAntiAliasType равным advanced. | |
| fontSharpness | Устанавливает резкость для внутренних текстовых полей. Правильные значения это числа от -400 до 400. Значение по умолчанию равно 0. Это свойство имеет аналогичный эффект свойству стиля fontSharpness у виджетов TextField, только оно применяется тогда когда вы используете внедренные FlashType шрифты. Изменение значения этого свойства не будет иметь эффекта, пока вы не установите значение свойства fontAntiAliasType равным advanced. | |
| fontThickness | Устанавливает плотность для внутренних текстовых полей. Правильные значения это числа от -200 до 200. Значение по умолчанию равно 0. Это свойство имеет аналогичный эффект свойству стиля fontThickness у виджетов TextField, только оно применяется тогда когда вы используете внедренные FlashType шрифты. Изменение значения этого свойства не будет иметь эффекта, пока вы не установите значение свойства fontAntiAliasType равным advanced. |
FlashType cвойства стилей задаются в файле default.css. Если вы замените этот файл или будете использовать другую таблицу стилей которая переопределяет эти свойства, Flash Player будет использовать стандатный обработчик шрифтов для отображения FlashType шрифтов. Если вы внедряете FlashType шрифты, но не установили свойство fontAntiAliasType равным advanced, вы потеряете все преимущества отображения FlashType шрифтов.
Так, как FlashType свойства стилей это CSS стили, вы можете использовать из так же как вы используете стандартные свойства стилей, такие как fontFamily и fontSize. Например, текстовый виджет может использовать subpixel-подгону FlashType обработки для New Century при резкости равной 50 и плотности равной -35, в то время, как кнопки будут использовать pixel-подгонку FlashType обработки для Tahoma 10 при резкости и плотности, равным 10 . Эти стили применяются ко всему тексту в TextField; вы не можете применить их только к некоторым символам, а не ко всему тексту.
