Posted on

在flex裡內嵌字型

在flex裡內嵌文字有幾種方式
1. FLEX 動態更換中文字型 ( 非嵌入方式 )
這個請參考下面這篇的教學
http://blog.corausir.org/programing/ausir-777
不過上面的方式 必須以PHP配合
並且空間要支援PHP的EXEC呼叫外部EXE檔的功能
許多空間伺服器並沒有支援這個功能
另外我在測試時也發現一個問題
就是當我要產生的文字過長(ex: 400~500字)
會發生讀取錯誤的問題

2. 直接內嵌字體
(1) 使用css

@font-face {
    src: url("location") | local("name");
    fontFamily: alias;
    [fontStyle: normal | italic | oblique;]
    [fontWeight: normal | bold | heavy;]
    [advancedAntiAliasing: true | false;]
}

(2)使用as3嵌入

package
{
import flash.text.Font;

public class ArialFont
{

[Embed(source=’assets/fonts/arial.ttf’, fontName=’ArialV’, mimeType=’application/x-font’, embedAsCFF=”true”)]
private static var ArialF:Class;

[Embed(source=’assets/fonts/arialbd.ttf’, fontName=’ArialV’, fontWeight=”bold”, mimeType=’application/x-font’, embedAsCFF=”true”)]
private static var ArialBoldF:Class;

[Embed(source=’assets/fonts/ariali.ttf’, fontName=’ArialV’, fontStyle=”italic”, mimeType=’application/x-font’, embedAsCFF=”true”)]
private static var ArialItalicF:Class;

[Embed(source=’assets/fonts/arialbi.ttf’, fontName=’ArialV’, fontWeight=”bold”, fontStyle=”italic”, mimeType=’application/x-font’, embedAsCFF=”true”)]
private static var ArialBoldItalicF:Class;

public function ArialFont()
{
Font.registerFont( ArialF );
Font.registerFont( ArialBoldF );
Font.registerFont( ArialItalicF );
Font.registerFont( ArialBoldItalicF );

}
}
}

直接嵌入文字會遇到一個很大的問題,就是文字太肥了,
這時,若我們只需要嵌入該字型檔的部份字型,而不需要全部嵌入
就可以設定unicodeRange
例如下面的範例





@font-face {
src:url(“../assets/MyriadWebPro.ttf”);
fontFamily: myFontFamily;
advancedAntiAliasing: true;
unicodeRange:
U+0041-U+005A, /* Upper-Case [A..Z] */
U+0061-U+007A, /* Lower-Case a-z */
U+0030-U+0039, /* Numbers [0..9] */
U+002E-U+002E; /* Period [.] */
}

TextArea {
fontFamily: myFontFamily;
fontSize: 32;
}




The Text Uses Only Some of Available Characters
0 1 2 3 4 5 6 7 8 9.



可以只嵌入部份的文字,
若我們希望只嵌入中文字的話,則可以參考flash-unicode-table.xml裡面
有一般文字檔案的unicode編碼字集範圍
這樣可以大大改善embed文字造成檔案過大及編譯過久的問題了!

參考資料: http://hi.baidu.com/sitoto/blog/item/12528ab1124a345c0923028b.html