Arbeta med teckensnitt
Flash Player 10 och senare, Adobe AIR 1.5 och senare
Objektet FontDescription används tillsammans med ElementFormat för att identifiera ett typsnitt och definiera vissa av dess egenskaper. Egenskaperna inkluderar teckensnittsnamn, bredd, läge, återgivning och var teckensnittet finns (på enheten eller inbäddat).
Obs! FTE har inte stöd för Type 1-teckensnitt eller bitmappade teckensnitt som Type 3, ATC, sfnt-wrapped CID och Naked CID.
Definiera teckensnittsegenskaper (objektet FontDescription)
Egenskapen fontName i FontDescription-objektet kan vara ett namn eller en kommaavgränsad lista med namn. I en lista som t.ex. ”Arial, Helvetica, _sans”, söker textmotorn först efter ”Arial”, sedan ”Helvetica” och till slut efter ”_sans” om programmet inte kan hitta de två första teckensnitten. Uppsättningen med teckensnittsnamn inkluderar tre namn på generiska enhetsteckensnitt: ”_sans”, ”_serif” och ”_typewriter”. De hänvisar till specifika enhetsteckensnitt beroende på uppspelningssystemet. Det är en bra rutin att ange standardnamn som dessa i alla teckensnittsbeskrivningar som använder enhetsteckensnitt. ”_serif” används som standard om fontName inte anges.
Egenskapen fontPosture kan ställas in på standardvärdet (FontPosture.NORMAL) eller kursiv stil (FontPosture.ITALIC). Egenskapen fontWeight kan ställas in på standardvärdet (FontWeight.NORMAL) eller på fet stil (FontWeight.BOLD).
var fd1:FontDescription = new FontDescription();
fd1.fontName = "Arial, Helvetica, _sans";
fd1.fontPosture = FontPosture.NORMAL;
fd1.fontWeight = FontWeight.BOLD;
Inbäddade teckensnitt jämfört med enhetsteckensnitt
Egenskapen fontLookup i FontDescription-objektet anger om textmotorn söker efter ett enhetsteckensnitt eller ett inbäddat teckensnitt för textåtergivning. Om ett enhetsteckensnitt (FontLookup.DEVICE) anges, söker programmet efter teckensnittet på uppspelningssystemet vid körningstillfället. Om du anger ett inbäddat teckensnitt (FontLookup.EMBEDDED_CFF) söker programmet efter ett inbäddat teckensnitt i SWF-filen vid körningstillfället. Endast inbäddade CFF-teckensnitt (Compact Font Format) fungerar med den här inställningen. Ett reservteckensnitt på enheten används om det angivna teckensnitt inte hittas.
SWF-filens storlek blir mindre om enhetsteckensnitt används. Inbäddade teckensnitt ger enhetlig återgivning på olika plattformar.
var fd1:FontDescription = new FontDescription();
fd1.fontLookup = FontLookup.EMBEDDED_CFF;
fd1.fontName = "Garamond, _serif";
Återgivningsläge och indikering
CFF-återgivning (Compact Font Format) är tillgängligt från och med Flash Player 10 och Adobe AIR 1.5. Den här typen av teckensnittsåtergivning gör texten tydligare och gör att små teckensnittsstorlekar kan visas med högre kvalitet. Inställningen gäller bara inbäddade teckensnitt. FontDescription ställs som standard in på den här inställningen (RenderingMode.CFF) för egenskapen renderingMode . Du kan ställa in egenskapen på RenderingMode.NORMAL så att den motsvarar återgivningstypen som används i Flash Player 7 eller tidigare versioner.
När CFF-återgivning är valt, styr en annan egenskap cffHinting hur vågräta linjer i glyferna passas in i delpixelrutnätet. Standardvärdet CFFHinting.HORIZONTAL_STEM använder CFF-indikering. Indikering tas bort om egenskapen ställs in på CFFHinting.NONE, vilket är lämpligt för animeringar och stora teckensnitt.
var fd1:FontDescription = new FontDescription();
fd1.renderingMode = RenderingMode.CFF;
fd1.cffHinting = CFFHinting.HORIZONTAL_STEM;
Låsa och klona FontDescription
När ett FontDescription-objekt tilldelas till ett ElementFormat, ställs egenskapen locked automatiskt in på true. Om du försöker ändra ett låst FontDescription-objekt, inträffar felet IllegalOperationError. Det bästa sättet är att helt definiera ett sådant objekt innan det tilldelas till en ElementFormat-instans.
Om du vill ändra en befintlig FontDescription-instans kontrollerar du först egenskapen locked. Om egenskapen är true kan du skapa en olåst kopia av objektet med metoden clone(). Du kan ändra egenskaperna för det olåsta objektet och sedan tilldela det till ElementFormat-instansen. Eventuella nya rader som skapas från detta TextElement kommer att ha den nya formateringen. Rader som skapats tidigare från samma objekt ändras inte.
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);
}
}
}