關於如何在Flash應用中嵌入字體,這個話題一直都是一個焦點。
最簡單的,打開Flash, 新建一個動態文本,選擇字體,然後在 Embed Characters裡選擇或者添加需要嵌入的字符。
比較復雜的是下面兩種在Flash Builder裡分別針對Flex與Action Script項目的嵌入方法。
Flex項目
使用css格式swf文件:
css文件定義如下例
- @font-face{
- src:url(“xxx.ttf”);
- font-family:xxx;
- unicodeRange:
- U+0041-U+005A, /* Upper-Case [A..Z] */
- U+0061-U+007A, /* Lower-Case a-z */
- U+0030-U+0039 /* Numbers [0..9] */,
- …..}
然後用mxmlc將css發布成swf文件,用StyleManager.loadStyleDeclarations([url])來調用,調用成功後就可以獲取字體信息。
Flash項目
使用Embed標簽
- [Embed (source="xxx.ttf",fontFamily="xxx", unicodeRange="..." )]
- private var myFontClass:Class;
- …
- Font.registerFont(myFontClass)
復制代碼
前種方法的好處在於運行時加載字體信息,但是和後種方法一樣,缺點在於使用unicodeRange並不能很好的編輯所要嵌入的字符。下面我重點來介紹一下我最提倡的運行時載入字體的方法:
1,建立字體庫flash文件(如font_lib.fla),使用最簡單的方法,打開flash,在舞台上建立文本並且手動添加字符集。
2,建立一個AS作為Application, 比如font_zh.as 核心代碼如下:
- [Embed (source="font_lib.swf", fontName="xxxx")]
- private var fontClass:Class;
- //這裡注意字體名xxx要與font_lib.fla裡的文本所使用的字體名一致。
- ….
- Font.registerFont(fontClass)
3,建立css文件,如style.css:
- headline{
- font-family:’xxx’
- font-size:20
- }
4,運行時載入style.css,用StyleSheet來初始化:
- var tmpStyleSheet: StyleSheet = new StyleSheet();
- tmpStyleSheet.parseCSS(參數為css的內容);
5,載入font_zh.swf後,便可以使用字體了,如:
- var tf:TextField = new TextField();
- tf.styleSheet = tmpStyleSheet;
- tf.embedFonts = true;
- tf.htmlText = “<headline>” + “This is a headline” + “</headline>”
這樣的方法,好處很多,既可以運行時載入字體文件,又可以很方便的修改需要嵌入的字符。
唯一的也是始終都無法避免的問題,就是無法運行時定義嵌入字符,無法避免每次修改字符集後都要手動更新字庫。