2012-10-11 63 views
0

我已经完全用完了这个想法。它遵循,是我刚才的问题的一部分:嵌入字体flash.text.engine

embedding a font in a swf using as3

我似乎就是不能够得到使用我的嵌入字体的flash.text.engine。注意,在用户选择了两种语言(用于翻译)之后,必须将字体加载到应用程序中(如嵌入到swf中)。似乎有一点信息意味着现在有必要使用sdk中的fontswf应用程序。我已经尝试过这种方法并生成了可加载的swf文件,但是我找不到有关如何加载这些文件的任何信息(即下面的getDefinition和registerFont位不起作用,因为这些swf中没有类)并应用于text.engine对象。嵌入的来源在我对上述问题的回答中。这是一个测试as3,它演示了它如何不起作用!

package 
{ 
import flash.display.Loader; 
import flash.display.Shape; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.text.engine.ElementFormat; 
import flash.text.engine.FontDescription; 
import flash.text.engine.TextBlock; 
import flash.text.engine.TextLine; 
import flash.text.engine.TextElement; 
import flash.net.URLRequest; 
import flash.text.Font; 

public class Main extends Sprite 
{ 
    private var loader:Loader; 
    private var tl:TextLine; 

    public function Main():void 
    { 
     loader = new Loader(); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE,fontLoaded); 
     loader.load(new URLRequest("EnglishF.swf")); 
    } 

    private function fontLoaded(evt:Event):void { 
     var FontClass:Class 
     FontClass = evt.target.applicationDomain.getDefinition("EnglishF") as Class; 
     try { 
      Font.registerFont(FontClass.myFont); 
      trace("successfully loaded " + FontClass); 
      // gives 'successfully loaded EnglishF' 
     } catch (err:Error) {} 
     var fontList:Array = Font.enumerateFonts(); 
     for (var i:int = 0; i < fontList.length; i++) { 
      trace(fontList[i].fontName, fontList[i].fontType); 
      // gives 'EnglishF embeddedCFF' 
     } 
     var block:TextBlock = new TextBlock(); 
     var font:FontDescription = new FontDescription("EnglishF"); 
     var formt:ElementFormat = new ElementFormat(font, 30); 
     trace(FontDescription.isFontCompatible("EnglishF","normal","normal"), formt.fontDescription.fontName); 
     // gives 'true EnglishF' 
     formt.color = 0x882233; 
     var span:TextElement = new TextElement("Hello World. This is certainly NOT in the Font provided!", formt); 
     block.content = span; 
     tl = block.createTextLine(); 
     tl.x = 10; 
     tl.y = tl.ascent + 10; 
     addChild(tl); 
    } 
} 
} 

我做错了什么,或者这是不可能的?

回答

0

希望这会有所帮助。在这条线:

var font:FontDescription = new FontDescription("EnglishF"); 

添加以下行:

font.fontLookup = FontLookup.EMBEDDED_CFF; 

这将让文本框架知道你正在使用CFF字体(在新文本框架中使用),而不是常规嵌入字体(用于TextFields)。

希望这会有所帮助。

约旦