+ flex builder 에서내장 폰트 사용하기.

embedFont.zip
(flex project achive)
embedFonts.as
package {
	import flash.display.Sprite;
	import flash.text.AntiAliasType;
	import flash.text.Font;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;

	public class embedFont extends Sprite
	{
		public function embedFont()
		{
			Font.registerFont(AssetManager.dinMedium);


			var tm:TextFormat = new TextFormat();
			tm.size = 48;
			tm.font = "dinMedium";
			tm.color = 0x000000;

			var tf:TextField = new TextField();
			tf.embedFonts = true;
			tf.autoSize = TextFieldAutoSize.LEFT;
			tf.antiAliasType = AntiAliasType.ADVANCED;
			tf.defaultTextFormat = tm;
			tf.text = "is this Din \nMedium font?";

			addChild(tf);
		}
	}
}


AssetManager.as
package
{
	final public class AssetManager
	{
		[Embed(source="../data/DINMed.TTF", fontName="dinMedium", mimeType="application/x-font-truetype")]
		static public var dinMedium:Class;
	}
}

refer to
http://mx.coldstorageonline.com/index.php?bid=48
http://www.marcosweskamp.com/blog/archives/000113.html
http://marcosweskamp.com/blog/2005/10/embedding-fonts-in-as3.html
http://developer.yahoo.com/flash/articles/runtime-fonts-as3.html
http://www.connectedpixel.com/blog/fonts/embedding
http://nochump.com/blog/?p=20
http://blog.paoloiulita.it/2008/03/11/as3-embedding-font-with-code-only/


+ swf 파일을 불러와서 폰트를 사용하는 방법
우선 아래처럼 라이브러리에 New font 로 원하는 폰트를 링크등록시킨후, swf 파일을 만든다.



그리고 Loader로 불러서 사용하면 되는데,
위 사이트를 참고로 아래와 같이 두개의 파일을 만들어 실행하면 된다.
중요한 건 빨간색 부분인데, 필요에 따라서 간단하게 바꿔쓰면 좋을 것 같다.


// FontLoadingExample.fla document class
// FontLoadingExample.as 

package {

	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.events.Event;

	public class FontLoadingExample extends Sprite {
	
		private var textFieldFactory:TextFieldFactory;
	
		public function FontLoadingExample() {
		
			textFieldFactory = new TextFieldFactory();
			textFieldFactory.addEventListener(TextFieldFactory.FONT_LOADED, fontReady);
			textFieldFactory.loadFont("fontEmbed.swf");
		
		}
	
		private function fontReady(e:Event):void {
			var tf:TextField = textFieldFactory.getNewTextField("Bingo!", 0x000000, 14);
			addChild(tf);
		
		}
	}
}

// custom class
// TextFieldFactory.as


package {

	import flash.text.Font;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormatAlign;
	import flash.text.TextFieldType;
	import flash.text.AntiAliasType;
	import flash.utils.*;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	
	public class TextFieldFactory extends EventDispatcher {
		
		public static  var FONT_LOADED:String = "fontLoaded";
		private static  var embeddedFont:Font = null;
		private var loader:Loader = null;
		
		public function TextFieldFactory() {
			
			loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
			
		}
		
		public function loadFont(swfURL:String):void {
			
			var context:LoaderContext = new LoaderContext();
			context.applicationDomain=ApplicationDomain.currentDomain;
			loader.load(new URLRequest(swfURL), context);
			
		}
		
		private function completeHandler(event:Event):void {
			
			var embeddedFontClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("embedDin") as Class;
			//"embedDin" 는 폰트 swf에서 링크된 이름
			Font.registerFont(embeddedFontClass);
			var embeddedFontsArray:Array = Font.enumerateFonts(false);
			embeddedFont = embeddedFontsArray[0];
			
			dispatchEvent(new Event(TextFieldFactory.FONT_LOADED));
		
		}
		
		public function getNewTextField(t:String, c:uint, s:uint):TextField {
		
			if ((embeddedFont != null) && embeddedFont.hasGlyphs(t)) {
				return getNewTextFieldEmbeddedFont(t,c,s);
			} else {
				return getNewTextFieldDeviceFont(t,c,s);
			}
		
		}
		
		public function getNewTextFieldEmbeddedFont(t:String, c:uint, s:uint):TextField {
		
			trace("getNewTextFieldEmbeddedFont: "+t);
			
			var tf:TextField = new TextField();
			var fo:TextFormat = new TextFormat();
			fo.font = embeddedFont.fontName;
			fo.color = c;
			fo.size = s;
			
			tf.defaultTextFormat = fo;
			tf.autoSize = TextFieldAutoSize.LEFT;
			tf.type = TextFieldType.DYNAMIC;
			tf.multiline = false;
			tf.selectable = false;
			tf.textColor = c;
			tf.embedFonts = true;
			tf.antiAliasType = AntiAliasType.ADVANCED;
			tf.border = true;
			tf.wordWrap = false;
			tf.text = t;
			
			return tf;
		
		}
		
		public function getNewTextFieldDeviceFont(t:String, c:uint, s:uint):TextField {
		
			var tf:TextField = new TextField();
			var fo:TextFormat = new TextFormat();
			trace("getNewTextFieldDeviceFont: "+t);
			fo.font = "_serif";
			fo.color = c;
			fo.size = s;
			tf.defaultTextFormat = fo;
			tf.autoSize = TextFieldAutoSize.LEFT;
			tf.type = TextFieldType.DYNAMIC;
			tf.multiline = false;
			tf.selectable = false;
			tf.textColor = c;
			tf.embedFonts = false;
			tf.border = true;
			tf.wordWrap = false;
			tf.text = t;
			
			return tf;
			
		}
	}
}

refer to :
http://easeyourdigitallife.blogspot.com/2007/06/flash-cs3-actionscript-3-example-using.html


+ 라이브러리에 등록된 폰트 바로 사용하기
위에 그림처럼 라이브러리에 등록된 폰트를 직접 사용하기

var dinClass:embedDin = new embedDin();
trace(dinClass is Font);

var tm:TextFormat = new TextFormat();
tm.font = dinClass.fontName;
tm.size = 50;

var tf:TextField = new TextField();
tf.embedFonts = true;
tf.defaultTextFormat = tm;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.text = "IS Din?";
addChild(tf);

저작자 표시 비영리 변경 금지