[AS3] Embedding multiple members of a font-family
In Flex/AS3 font embedding has been totally revamped. You have to use the Embed tag. Simple embedding of a single font isn't a problem but when I try to embed multiple members of a font family, I get into trouble.
I want to embed Helvetica and Helvetica Bold in one of my projects. Embedding Helvetica isn't a problem but I can't get the bold to work.
If I just embed the bold font I get this error:
exception during transcoding: Font for alias 'Helvetica LT Std' with plain weight and style was not found at: file:/c:/GFX/fonts/HelveticaLTStd-Bold.ttf
Now I got it working in one project this way:
[Embed(source='fonts/HelveticaLTStd-Bold.ttf', source='fonts/HelveticaLTStd-Roman.ttf', fontFamily="Helvetica LT Std", mimeType="application/x-font-truetype")]
private static var FONT_HELVETICA:String;
But when I copied the exact code to another project and moved the fonts folders with it and recompiled. It didn't work! When I recompiled the project where it worked it still worked. But ever since that one project I haven't been able to get it working. I've got the feeling Flex is extremely buggy in this aspect.
So, how do I embed multiple parts of a font-family in Actionscript 3, compiled with Flex?
PS: Sorry for my sloppy English.
[Embed(source="../fonts/Verdana_Bold_Italic.ttf", fontWeight="bold", fontStyle="italic", fontName="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaBoldItalicTTF:String;
better than adding the font to the FLA library and assigning the Font's link, then declaring it in the code like in this example
myFormat.font = myFont.fontName; (myFont being the embedded font, taken from http://www.adobe.com/devnet/flash/quickstart/embedding_fonts/#section1)
I thought I'd summarize this great bit of wisdom with some key words for anyone else searching out there.
Specifically, in my case I had issues with using multiple fonts with CSS in an HTML textfield.
The Setup
You're using AS3/CS3/Flex/mxmlc. You've got some texfields with HTML code and a little CSS for good clean markup. You'd like to embed some fonts to make sure things appear consistently on any platform.
The Problem
After learning about the "Embed" meta tag you've managed to embed a font and display it. But variations of fonts (bold, italic) come in different files and you can't get them to work at the same time in a single text field.
After some thinking you decided to embed several fonts under the same family name, like so:
[Embed(source="../fonts/Verdana.ttf", fontWeight="normal", fontName="VerdanaRegular", fontFamily="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaRegularTTF:String;
[Embed(source="../fonts/Verdana_Bold.ttf", fontWeight="bold", fontName="VerdanaBold", fontFamily="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaBoldTTF:String;
Then you try to pass the fontFamily to CSS:
...
var defaultStyle:Object = new Object();
defaultStyle.fontFamily="Verdana";
But this doesn't work. CSS doesn't recognize the fontFamily from the Embed tag; it only recognizes the fontName tag.
You also try to set a text format for your textfield (thinking of passing the fontFamily name with format.font="Verdana"). But it seems that 'format' isn't allowed with CSS.
The Solution
Use a single fontName for the fonts when embedding them. Pass this single fontName to CSS (you don't need to include a fontFamily field). Also make sure to include the proper fontStyle/fontWeight fields when embedding italic/bold fonts. Finally, remember to set the "embedFonts" property to 'true' for your textfield.
Here are the important snippets. Embedding:
[Embed(source="../fonts/Verdana.ttf", fontName="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaTTF:String;
[Embed(source="../fonts/Verdana_Bold.ttf", fontWeight="bold", fontName="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaBoldTTF:String;
[Embed(source="../fonts/Verdana_Italic.ttf", fontStyle="italic", fontName="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaItalicTTF:String;
[Embed(source="../fonts/Verdana_Bold_Italic.ttf", fontWeight="bold", fontStyle="italic", fontName="Verdana", mimeType="application/x-font-truetype")]
public static const VerdanaBoldItalicTTF:String;
Using CSS with the textfield:
var defaultStyle:Object = new Object();
defaultStyle.fontFamily = "Verdana";
var style:StyleSheet = new StyleSheet();
style.setStyle(".defaultStyle", defaultStyle);
var t:TextField = new TextField();
t.embedFonts = true;
t.styleSheet = style;
t.htmlText = "My bold text";
And you're done.
e.g.
// Normal
[Embed(source = "../../../../flash_assets/Vectora LT Std/VectoraLTStd-Roman.otf", fontWeight= "normal", fontFamily = "Vectora")]
private static var Vectora:Class;
// Bold
[Embed(source = "../../../../flash_assets/Vectora LT Std/VectoraLTStd-Bold.otf", fontWeight= "bold", fontFamily = "Vectora")]
private static var VectoraBold:Class;
ok, thanks
#If you have any other info about this subject , Please add it free.# |

