使用字体

Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本

FontDescription 对象与 ElementFormat 配合使用可以标识字型,以及定义其部分特征。这些特征包括字体名称、粗细、形态、呈示以及如何查找字体(设备字体与嵌入字体)。

注: FTE 不支持 Type 1 字体或 Type 3、ATC、sfnt 换行 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(压缩字体格式)呈示。以此方式呈示字体能使文本更加清晰可辨,并为小字号的字体提供更高品质的显示效果。此项设置只适用于嵌入字体。对于 renderingMode 属性, FontDescription 默认设为此项设置 ( 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); 
        } 
    } 
}