Можно ли динамически вставлять шрифты во Flex? - PullRequest
0 голосов
/ 16 мая 2010

Мне интересно, могу ли я динамически вставлять шрифты во Flex. Я хочу встраивать разные шрифты для разных пользователей, поэтому я не хочу встраивать все возможные шрифты в один и тот же файл Flex. Если это возможно, не могли бы вы опубликовать пример кода.

1 Ответ

2 голосов
/ 16 мая 2010

Вы можете сделать это в Actionscript. Я использовал этот прием главным образом для использования шрифтов opentype, которые не поддерживаются компилятором в IDE Flash, и для создания библиотек шрифтов, которые можно загружать лениво (только при необходимости), но вы также можете использовать это для выборочной загрузки шрифтов. Если у вас на сервере есть компилятор mxmlc, вы даже можете сгенерировать файл fontlib.as и скомпилировать его по команде.

// fontlib.as
// font library file
package {
   import flash.display.Sprite;

   public class fontlib extends Sprite {
      [Embed(source = 'font/path/FontFile.otf', fontName = 'FontFile', unicodeRange = 'U+0020-U+007E,U+00AB,etc...')]
      public static var FontFile:Class;
      public static const FontFile_name:String = "FontFile";  // matches 'fontName' in embed

      public function fontlib() {
      }
   }
}

Это можно скомпилировать так:

mxmlc fontlib.as

Вы можете использовать в своем приложении, как это:

// Main.as
// document class
package {
   import flash.text.Font;
   import flash.display.Loader;
   import flash.events.Event;
   import flash.system.ApplicationDomain;
   import flash.text.StyleSheet;

   public var fontsLoader:Loader;
   public var fontFile:String = "";
   public var ss:StyleSheet;

   public function Main() {
      fontsLoader = new Loader();
      fontsLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onFontsLoadComplete);
   }

   private function _onFontsLoadComplete(e:Event):void {
      var fontlib:Class = e.target.applicationDomain.getDefinition('fontlib');

      Font.registerFont(fontlib.FontFile);  // registers font
      fontFile = fontlib.FontFile_name;     // name the font was loaded as

      // actually using the font looks like this:
      ss = new StyleSheet();
      ss.parseCSS("div { fontFamily: " + fontFile + "; }");
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...