2010-11-16 50 views
0

我想要做的是一個Flex應用程序,它使用外部swf中可用的字體。 我至今succeded是:如何在外部SWF文件中使用字體

  • 創建一個AS類的帽子持有的嵌入字體:

    包 { 進口flash.display.Sprite;

    public class _Arial extends Sprite 
    { 
        [Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E')] 
        public static var _MyArial:Class; 
    } 
    

    }

  • 用下面的命令編譯成SWF這個:mxmlc.exe -static-link-runtime-shared-libraries=true _Arial.as

當我試圖從我的Flex應用程序加載的字體,這將失敗,並以下錯誤信息:

ArgumentError: Error #1508: The value specified for argument font is invalid. 
    at flash.text::Font$/registerFont() 
    at valueObjects::FontLoader/fontLoaded()[C:\Documents and Settings\nutrina\Adobe Flash Builder 4\flex_pdf\src\valueObjects\FontLoader.as:33] 

這是我嘗試加載SWF文件的代碼:

package 
    { 

    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.text.*; 

    import mx.collections.ArrayCollection; 
    import mx.core.FontAsset; 

    public class FontLoader extends Sprite { 

     public function FontLoader(url:String) { 
      super(); 
      loadFont(url); 
     } 

     private function loadFont(url:String):void { 
      var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded); 
      loader.load(new URLRequest(url)); 
     } 

     private function fontLoaded(event:Event):void { 
      var fontList:ArrayCollection = new ArrayCollection(Font.enumerateFonts(true)); 
      var FontLibrary:Class = event.target.applicationDomain.getDefinition("_Arial") as Class; 
      trace("FontList: " + fontList) 
      trace("FontLibrary: " + FontLibrary) 
      trace("FontLibrary._Arial: " + FontLibrary._MyArial) 
      Font.registerFont(FontLibrary._MyArial); 

      fontList = new ArrayCollection(Font.enumerateFonts(true)); 
      trace("Font list: " + fontList) 
     } 
    } 
    } 

字體文件肯定不是腐敗,因爲如果我把_Arial類從上面的代碼到Flex應用程序,嵌入作品。所以我的猜測是,我可能錯過了一些編譯選項?

我使用的Adobe Flash Builder 4中

我希望在這個問題上的任何幫助。

感謝, 傑拉德

+0

爲什麼你想要在外部swf的字體? – 2010-11-16 11:18:59

+0

我需要在外部的瑞士法郎,因爲最終會有一些字體文件,應在我的應用程序中可用。其中只有少數會被使用 - 應該可以在運行時配置,並且取決於用戶將要做什麼。 在應用程序中嵌入所有的字體並沒有什麼意義,因爲它的大小會增長很多。 – nutrina 2010-11-16 11:49:40

回答

0

可能是與類名衝突的問題。我花了幾個小時處理外部字體加載問題。原來,我的字體類被稱爲「主」,試圖加載它的應用程序也是如此。字體從未正確註冊。

相關問題