Embedding fonts in a Flex application using Embed metadata (redux)

by Peter deHaan on April 1, 2008

In a previous example, “Embedding fonts in a Flex application using Embed metadata”, we saw how you could embed fonts using the [Embed] metadata with the source attribute.

The following example shows how you can embed system fonts in a Flex application using the [Embed] metadata with the systemFont attribute.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/04/01/embedding-fonts-in-a-flex-application-using-embed-metadata-redux/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Style>
        .regularFontStyle {
            fontFamily: regularFont;
        }

        .italicFontStyle {
            fontFamily: italicFont;
            fontStyle: italic;
        }
    </mx:Style>

    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.utils.ObjectUtil;

            [Bindable]
            [Embed("bulletWarning.png")]
            private var bulletWarningIcon:Class;

            [Embed(systemFont="Tahoma",
                    fontName="regularFont",
                    mimeType="application/x-font")]
            private var font1:Class;

            [Embed(systemFont="Tahoma",
                    fontName="italicFont",
                    fontStyle="italic",
                    advancedAntiAliasing="true",
                    mimeType="application/x-font")]
            private var font2:Class;

            private function displayEmbeddedFont(name:String):void {
                var font:Object = systemManager.embeddedFontList[name];
                Alert.show(ObjectUtil.toString(font), name + ":");
            }
        ]]>
    </mx:Script>

    <mx:Form>
        <mx:FormItem label="regularFont:" direction="horizontal">
            <mx:Label id="lbl1"
                    text="The quick brown fox jumped over the lazy dog."
                    styleName="regularFontStyle" />
            <mx:Image source="{bulletWarningIcon}"
                    click="displayEmbeddedFont('regularFont');" />
        </mx:FormItem>
        <mx:FormItem label="italicFont:" direction="horizontal">
            <mx:Label id="lbl2"
                    text="The quick brown fox jumped over the lazy dog."
                    styleName="italicFontStyle" />
            <mx:Image source="{bulletWarningIcon}"
                    click="displayEmbeddedFont('italicFont');" />
        </mx:FormItem>
    </mx:Form>

</mx:Application>

View source is enabled in the following example.

{ 7 comments… read them below or add one }

Yoav April 10, 2008 at 5:49 am

Thanks for the explanation.
My problem with system font embedding is that the system font becomes antialised – which means it doesn’t looks so sharp as it could. As far as I understand fontAntiAliasType doesn’t apply to system fonts. So what can be done?

Reply

André August 21, 2008 at 3:32 pm

That would be an interesting answer. I’m searching my a.. off right now to find a solution to get the font sharper. But I need the embedding to animate everything properly :-/

Reply

André August 21, 2008 at 4:27 pm

Ah, found the solution :-) This thread http://blog.flexexamples.com/2007/10/24/setting-a-fonts-anti-alias-type-sharpness-thickness-and-grid-fit-type-in-flex/#more-252 is it…

Just use advancedAntiAliasing = true and fontGridFitType = pixel, that’s it to get the embbed font sharp…

Reply

Robert Henniger December 6, 2009 at 10:16 am

Hi, thanks for this great acrticle. WIll this font embedding also work with a HTMLControl? Can i embed a special font and use it in the Webpage?
Thanks in advance for a response.
Robert

Reply

Alex Fisherr January 14, 2010 at 12:17 am

Hi Everyone,
I’m trying to place a button in vertical mode in flex 3. I am using the rotation property set to 90. It works great but the label of button disappears. Is there any way to retain the label of the button in vertical mode as the button is.

looking for some response …..

Reply

Peter deHaan January 14, 2010 at 1:13 pm

@Alex Fisherr,

Are you using an embedded font for the Button label?

Peter

Reply

Daniel March 13, 2010 at 12:59 pm

Hey Peter,
the nice thing is, you could use the same fontName for all tpefaces of a font. So in the css you would specify if you want to use the imported italic or not.

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: