使用字體
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);
}
}
}