使用字體

Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本

FontDescription 物件會與 ElementFormat 搭配使用,藉此識別字體並定義部分特性。這些特性包含字體名稱、粗細、型態、顯示方式,以及如何找到字體 (裝置或內嵌)。

備註: FTE 不支援 Type 1 字體或點陣圖字體 (例如 Type 3、ATC、sfnt-wrapped CID 或 Naked CID)。

定義字體特性 (FontDescription 物件)

FontDescription 物件的 fontName 屬性可以是單一名稱或以逗號分隔的名稱清單。例如,在「Arial, Helvetica, _sans」清單中,文字引擎會先尋找「Arial」,接著尋找「Helvetica」,最後再尋找「_sans」(如果找不到前兩個字體)。這組字體名稱包含三個一般裝置字體名稱:“_sans”、“_serif”和“_typewriter”。它們會對應至特定裝置字體 (視播放系統而定)。最佳作法是指定預設名稱 (例如所有字體說明中使用裝置字體的名稱)。如果未指定 fontName ,則預設會使用“_serif”。

fontPosture 屬性可以設為預設值 ( FontPosture.NORMAL ) 或斜體 ( FontPosture.ITALIC )。 fontWeight 屬性可以設為預設值 ( FontWeight.NORMAL ) 或粗體 ( FontWeight.BOLD )。

var fd1:FontDescription = new FontDescription(); 
fd1.fontName = "Arial, Helvetica, _sans"; 
fd1.fontPosture = FontPosture.NORMAL; 
fd1.fontWeight = FontWeight.BOLD;

內嵌與裝置字體的比較

FontDescription 物件的 fontLookup 屬性會指定文字引擎要尋找裝置字體或內嵌字體來顯示文字。如果指定裝置字體 ( FontLookup.DEVICE ),則執行階段會尋找播放系統上的字體。而指定內嵌字體 ( FontLookup.EMBEDDED_CFF ) 會讓執行階段尋找在 SWF 檔中指定名稱的內嵌字體。只有內嵌 CFF (壓縮字體格式) 字體才能使用此設定。如果找不到指定的字體,則會使用備用裝置字體。

裝置字體產生較小的 SWF 檔。內嵌字體可讓您各平台之間保持字體的真實度。

var fd1:FontDescription = new FontDescription(); 
fd1.fontLookup = FontLookup.EMBEDDED_CFF; 
fd1.fontName = "Garamond, _serif";

顯示模式和微調

自 Flash Player 10 和 Adobe AIR 1.5 開始提供了 CFF (壓縮字體格式) 顯示。此類型的字體顯示會讓文字更容易辨識,並讓小型字體具備更高的顯示品質。此設定只適用於內嵌字體。 FontDescription 會將 renderingMode 屬性預設為此設定 ( RenderingMode.CFF )。您可以將此屬性設為 RenderingMode.NORMAL ,以符合 Flash Player 7 或舊版本所使用的顯示類型。

選取 CFF 顯示時,第二個屬性 cffHinting 可控制字體的水平詞幹放入子像素格線的方式。預設值 CFFHinting.HORIZONTAL_STEM 會使用 CFF 微調。如果將此屬性設為 CFFHinting.NONE ,則會移除微調 (這適用於動畫或大型字體)。

var fd1:FontDescription = new FontDescription(); 
fd1.renderingMode = RenderingMode.CFF; 
fd1.cffHinting = CFFHinting.HORIZONTAL_STEM;

鎖定和仿製 FontDescription

FontDescription 物件指定給 ElementFormat 時,它的 locked 屬性會自動設為 true 。嘗試修改鎖定的 FontDescription 物件時,會擲出 IllegalOperationError 。最佳作法是先完整定義這類物件,然後再將它指定給 ElementFormat

如果您想要修改現有 FontDescription ,請先檢查它的 locked 屬性。如果設為 true ,則使用 clone() 方法來建立物件的解除鎖定複本。此解除鎖定物件的屬性可以進行變更,可以稍後將它指定給 ElementFormat 。任何透過此 TextElement 建立的新字行都具有新的格式。先前透過此相同物件建立的字行會保留不變。

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class FontDescriptionCloneExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef1:ElementFormat; 
        private var ef2:ElementFormat; 
         private var fd1:FontDescription = new FontDescription(); 
        private var fd2:FontDescription; 
 
        public function FontDescriptionCloneExample() 
        { 
            fd1.fontName = "Garamond"; 
            ef1 = new ElementFormat(fd); 
            var str:String = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            var tx1:TextLine = tb.createTextLine(null,600); 
            addChild(tx1); 
             
            fd2 = (fd1.locked) ? fd1.clone() : fd1; 
            fd2.fontName = "Arial"; 
            ef2 = (ef1.locked) ? ef1.clone() : ef1; 
            ef2.fontDescription = fd2; 
            tb.content.elementFormat = ef2; 
            var tx2:TextLine = tb.createTextLine(null,600); 
            addChild(tx2); 
        } 
    } 
}