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