EmbedFont - mems/fstream GitHub Wiki

Embed a font in a SWF

Introduction

All this methods don't give the same result (render) in FlashPlayer.

Attention: some informations are deduced since it's not explicity written or contradictory in official documentation (mainly for supported font file type)

Flash Professional

Flash Professional support metadata tags with Flex SDK. See metadata tags.

Supported font file types are:

  • TrueType (*.ttf)
  • TrueType Collections (*.ttc)
  • OpenType (*.otf)
  • Mac Data Fork Fonts (*.dfont)
  • Mac Resource Fork TrueType Suitcases (without file extension)
  • Type 1 PostScript (non available for FTE)
  • Bitmap (Macintosh only)

Library

It's possible to use Flash Professional for font embedding through library. But it's impossible to define which chars will be embedded until CS5 (only Latin1 chars was embedded).

Text field

Flex SDK

It's used for command line compilation, by Flash Builder and Flash Professional (since CS4, for metadata tags compilation).

Metadata tags

This tags are used during ActionScript code compilation.

[Embed(source="<sourceFile>", property1, property2, …])]

Tag properties :

|| *Property*								|| *Value*																																					|| *Description* ||
|| `systemFont`^2^							|| `<font-name>`																																			|| Nom d'une police installé sur le système ||
|| `source`^2^								|| `<location>`																																				|| Emplacement du fichier de police ou du ficher SWF ||
|| `src`^1^^2^								|| `url("<location>")`																																		|| Emplacement du fichier de police ||
|| `symbol`									|| `<full-qualified-class-name>`																															|| Symbole (classe) à utiliser du SWF source (nécessite que `source` soit un SWF). Peux être fusionné avec `source` en indiquant `source="mysource.swf#mysymbol"` à la place de `source="mysource.swf", symbol="mysymbol"` ||
|| `fontName`^3^							|| `<font-name-alias>`																																		|| Définit un alias pour la police qu'il faudra utiliser pour les `Textformat` et les `StyleSheet`. Il peux être commun si plusieurs styles pour une même police doivent être définies (`fontWeight` et `fontStyle`), 4 configurations sont possibles. Si celui n'est pas définit, le nom système ou le `fontFamily` sera utilisé. ||
|| `fontFamily`^3^ | `font-family`^1^^3^	|| `<font-name>`																																			|| Nom de la police sélectionnée dans la collection (`*`.ttc, `*`.dfont, `*`.swf). Si pas de collection, fonctionne de la même façon que `fontName`  ||
|| `fontWeight`								|| `normal` | `bold` | `heavy`																																|| Graisse de la police. `normal` par défaut ||
|| `fontStyle`								|| `normal` | `italic` | `oblique`																															|| Style de la police. `normal` par défaut ||
|| `mimeType`^4^							|| `application/x-font` | `application/x-font-truetype` | `application/x-font-truetype-collection` | `application/x-font-opentype` | `application/x-dfont`	|| Le type MIME. A défaut de connaitre le plus adéquate, utiliser `application/x-font` ||
|| `embedAsCFF`^5^							|| `true` | `false`																																			|| Active ou désactive la méthode d'embarquement Compact Font Format (DefineFont4) utilisé par le FTE (flash.text.engine) seulement. `true` dans Flex SDK 4+ par défaut (`false` pour les version précédentes) ||
|| `advancedAntiAliasing`					|| `true` | `false`																																			|| Active ou désactive les informations pour l'antialiasing avancé. `true` par défaut. ||
|| `unicodeRange`							|| `<unicode-range>` | `<range-name>`																														|| Définit par [http://www.w3.org/TR/1998/REC-CSS2-19980512/fonts.html#descdef-unicode-range CSS2 unicode range]. `U+0000-U+FFFF` par défaut. ||
  1. Supporté seulement dans une définition CSS
  2. L'une de ces propriétés est obligatoire
  3. Peux être obligatoire en fonction du format de la source
  4. Peux être obligatoire en fonction du format de la source et des !FontManager utilisé
  5. Dans les version avant la build 7972 du Flex SDK la propriété s'appelais cff

Note: Some others properties are not listed here, not used for font embedding or are undocumented.

Example of class linked tag:

package example.text
{
	import flash.text.Font;
	
	[Embed(source="/assets/fonts.swf", fontFamily="Arial Unicode MS")]
	public class EmbeddedFont$ArialUnicodeMS extends Font
	{

	}
}

Example of property or constante linked tag:

[Embed(systemFont="Arial Unicode MS" unicodeRange="U+0061-U+007A" mimeType="application/x-font")]
public static const ARIAL_UNICODE_MS_CLASS:Class

Attention: ARIAL_UNICODE_MS_CLASS will contains a class of type mx.core.FontAsset. It will embed few Flex classes (useless weight). Favour class linked tag way.

Example of a type with a multiple styles (fonts) :

//Helvetica Neue
[Embed source="Helvetica_Neue.otf" fontName="Helvetica Neue" fontStyle="regular" fontWeight="regular" mimeType="application/x-font-opentype"]
public class EmbeddedFont$HelveticaNeueRegular extends Font{}

//Helvetica Neue Italic
[Embed source="HelveticaNeue.ttc" fontName="Helvetica Neue" fontStyle="italic" fontWeight="regular" mimeType="application/x-font-truetype-collection"]
public class EmbeddedFont$HelveticaNeueItalic extends Font{}

//Helvetica Neue Bold
[Embed source="HelveticaNeue.ttc" fontName="Helvetica Neue" fontStyle="regular" fontWeight="bold" mimeType="application/x-font-truetype-collection"]
public class EmbeddedFont$HelveticaNeueBold extends Font{}

//Helvetica Neue Bold Italic
[Embed source="HelveticaNeue.ttc" fontName="Helvetica Neue" fontStyle="italic" fontWeight="bold" mimeType="application/x-font-truetype-collection"]
public class EmbeddedFont$HelveticaNeueBoldItalic extends Font{}

Note: Styles could be provided by differents collections (*.ttc, *.dfont ou *.swf).

Example with other styles than bold and italic

//Helvetica Neue Light
[Embed source="HelveticaNeue.ttc" fontName="Helvetica Neue Light" fontStyle="regular" fontWeight="regular" mimeType="application/x-font-truetype-collection"]
public class EmbeddedFont$HelveticaNeueLight extends Font{}

//Helvetica Neue Light Italic
[Embed source="HelveticaNeue.ttc" fontName="Helvetica Neue Light" fontStyle="italic" fontWeight="regular" mimeType="application/x-font-truetype-collection"]
public class EmbeddedFont$HelveticaNeueLightItalic extends Font{}

Attention: All fonts with style differents than italic | oblique and bold | heavy must have there fontStyle and fontWeight equal to normal and fontName or systemFont equal to exact font name

Supported font file types are:

  • SWF file embedding a font
  • TrueType (*.ttf)
  • TrueType Collections (*.ttc)
  • OpenType (*.otf)
  • Mac Data Fork Fonts (*.dfont)
  • Mac Resource Fork TrueType Suitcases (without extension)

Note: Other ways exist to embed an asset (MXML instruction Embed(…) and Flex CSS @Embed(…)) but could not always used to embed a font.

Flex styles

CSS could be used to stylish interface components of Flex framework.

This method used to define a font in Flex. It's works pretty similar to metadata tag (see above)

@font-face {
	src: url("../assets/MyriadWebPro.ttf");
	fontFamily: "Myriad Pro";
	embedAsCFF: false;
}

@font-face {
	src:url("../assets/MyriadWebPro-Bold.ttf");
	fontFamily: "Myriad Pro";
	fontWeight: bold;
	embedAsCFF: false;
}

@font-face {
	src:url("../assets/MyriadWebPro-Italic.ttf");
	fontFamily: "Myriad Pro";
	fontStyle: italic;
	embedAsCFF: false;
}

Flex SDK - fontkit

This command line tool is given with non-opensource Flex SDK version. It's used to embed a font in a SWF file, without make linkage with an ActionScript class (SWF tag SymbolClass).

Need a non-open-source version of Flex SDK (see fontswf)

fontswf [options] <font-file>

Arguments:

|| *Argument*							|| *Description* ||
|| `-a` | `-alias <font-name-alias>`	|| Définit un alias pour la police, par défaut utilise le nom de la police. Nom de la police qu'il faudra utiliser dans le SWF ||
|| `-b` | `-bold`						|| Embarquer la version grasse de la police ||
|| `-i` | `-italic`						|| Embarquer la version italique de la police ||
|| `-o` | `-output <output-file-path>`	|| Définit le chemin de destination ||
|| `-u` | `-unicode-range <range>`		|| Définit les caractères à embarquer. Par défaut la valeur est `U+0000-U+FFFF`, qui inclut tout les caractères. Pour la syntaxe, voir [http://www.w3.org/TR/1998/REC-CSS2-19980512/fonts.html#descdef-unicode-range CSS2 unicode range descriptor] ||
|| `-3`									|| Génère une police SWF pour les applications à base de `TextField` ||
|| `-4`									|| Génère une police SWF pour les applications qui supportent le CFF (`flash.text.engine`, Flash 10 uniquement). Option par défaut ||

Attention: Currently !FontStream is not ready for CFF fonts.

Usage example:

fontswf -3 -u U+0020-007F -bold -o ~/myboldfont.swf ~/myboldfont.ttf

This will embed Latin Basic chars of font myboldfont.ttf as non CFF in SWF myboldfont.swf.

A undocumented setting could define if the non-compressioness of generated SWF file by adding a system property flex.swf.uncompressed set to true (compressed by default if version is greater or equal to SWF6).

Example (need direct call, instead of using fontswf shellscript provided by Flex SDK):

java -Dsun.io.useCanonCaches=false -Xms32m -Xmx512m -Dflex.swf.uncompressed="true" -jar "FLEX_HOME/lib/flex-fontkit.jar" -3 -u U+0020-007F -bold -o ~/myboldfont.swf ~/myboldfont.ttf

Need to update path FLEX_HOME relative to location of Flex SDK.

Supported font file types are:

  • TrueType (*.ttf)
  • TrueType Collections (*.ttc)
  • OpenType (*.otf)
  • Mac Data Fork Fonts (*.dfont)
  • Type 1 PostScript

Some links: * Using the fontswf utility * About the font managers * Setting character ranges * Using multiple typefaces

hxswfml

hxswfml ttf2swf "myfont.ttf" "myfont.swf" -glyphs 32-127 -class EmbeddedFont

Supported font file types are:

  • TrueType (*.ttf)

Some links:

Other tools

⚠️ **GitHub.com Fallback** ⚠️