外部SWFファイルからフォントの埋め込み。
ActionScriptで外部のSWFファイルに登録してあるフォントを、動的に埋め込む方法です。
初めにフォント情報をリンケージとして登録するためのSWFを作成します。
新規でflaファイルを作成して、ライブラリパネル上で右クリックから表示されるコンテクストメニューで「新しいフォント…」を選択します。
フォント名を入力して、埋め込みたいフォントと文字を選択します。
ここでのフォント名は後から参照することはないので、自由な名称で構いません。
続いて「ActionScript」タブからリンケージの「アクションスクリプト用に書き出し」にチェックを入れて、クラス名を入力します。
このクラス名は埋め込みの際にActionScriptから参照します。
これでライブラリパネルに、リンケージとしてフォントが登録されました。
この状態でSWFファイルを書き出して、ファイル名を「fonts.swf」としておきます。
次に、作成した外部SWFを読み込み、フォントを埋め込むActionScriptファイルを作成します。
下記のようなスクリプトを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.text.AntiAliasType; import flash.text.Font; import flash.text.TextField; import flash.text.TextFormat; public class Main extends Sprite { public function Main() { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest("fonts.swf")); function onComplete(event:Event):void { var domain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain; var HelveticaRegular:Class = domain.getDefinition("HelveticaRegular") as Class; var field:TextField = new TextField(); var format:TextFormat = new TextFormat(); var helvetica_regular:Font = new HelveticaRegular(); Font.registerFont(HelveticaRegular); format.font = helvetica_regular.fontName; field.defaultTextFormat = format; field.embedFonts = true; field.antiAliasType = AntiAliasType.ADVANCED; field.text = "Font embedded via external swf file."; stage.addChild(field); } } } } |
上記はドキュメントクラスとして記述した場合の例です。
1 2 3 |
var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest("fonts.swf")); |
初めに作成した外部SWFファイルを読み込みます。
1 2 |
var domain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain; var HelveticaRegular:Class = domain.getDefinition("HelveticaRegular") as Class; |
外部SWFファイルにリンケージとして登録したフォント(クラス)を利用可能にするために「ApplicationDomain」を登録します。
フォントクラス「HelveticaRegular」として登録します。
1 |
Font.registerFont(HelveticaRegular); |
先ほど登録したフォントクラスを、グローバルフォントに登録します。
1 |
format.font = helvetica_regular.fontName; |
フォントクラスから作成したオブジェクトをもとに、テキストフォーマットにフォント名を指定します。
1 |
field.embedFonts = true; |
フォントの埋め込みを有効にします。
1 |
field.antiAliasType = AntiAliasType.ADVANCED; |
フォントクラスから埋め込みの際のテキストフィールドは、アンチエイリアスが「NORMAL」の状態で、あまりきれいではないので「ADVANCED」に変更します。