[AS3] TextLayoutFramework用フォントの埋め込み+CS4で使う

2010/03/12

基本はblog.taiga.jpさんの記事を参照すればできました。ありがとうございますです。
>> TLF (Text Layout Framework) と戯れる #09

あと、皆様の記事を参考にしました。どうもです。助かりました。
>> [AS]TLF用にCFF形式のフォントを埋め込んだSWFがどうやっても作れない →解決!!!(memo.393)
>> TextlayoutFrameworkやFlash.text.engineで埋め込みOpenTypeフォントを使う方法(高橋文樹.com)
>> 新テキストエンジンFlash.text.engineでOpenTypeのフォントを埋め込みで使う(SIHOのActionScript勉強メモ)
>> Flex 4で画像の埋め込みでエラー & flex-config.xmlのバージョンアップ(sub Diary (仮))

流れを書いておきます

FlashDevelop(FD)でフォントの埋め込みをしました。

FlashDevelopでのフォントの埋め込み

Flex4SDKbeta2をダウンロード(Flex 4-Beta 2のAdobe Flex SDK)

解凍してできたフォルダのパスをFDに通す
Tools > Program Settings > AS3Context > Language > FlexSDK Location

■新規プロジェクトの作成
Project > New Project > AS3 Project

srcに埋め込みたいフォントを置く。今回はVerdanaとVerdanaBoldを埋め込む。
src
|-verdana.ttf
|-verdanab.ttf
|-MyFont.as(Main.asから名前変更した)

プロジェクトの設定
Project > Properties > Complier Options > Additional Compiler Options
に以下を追加
-static-link-runtime-shared-libraries=true

今回は英語フォントのみ埋め込みした。
unicodeのレンジはここから

>> UNICODE RANGE GENERATOR

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class MyFont extends Sprite 
	{
		[Embed(	
			source = "verdana.ttf",	
			fontName = "MyVerdanaRegular", 
			mimeType = "application/x-font",
			embedAsCFF = "true",
			advancedAntiAliasing = "true",
			unicodeRange  = "U+0020-U+007e"
		)]
		public static const MyVerdana1:Class;
		
		[Embed(	
			source = "verdanab.ttf",	
			fontName = "MyVerdanaBold", 
			mimeType = "application/x-font",
			embedAsCFF = "true",
			advancedAntiAliasing = "true",
			unicodeRange  = "U+0020-U+007e"
		)]
		public static const MyVerdana2:Class;
		
		public function MyFont()
		{
			
		}
	}
	
}

これでコンパイルしてできたswfをFontEmbed.swfとする

CS4で使う

前の記事を参考にMXPをインストールしておく
>> [AS3] TextLayoutFrameworkをCS4で使えるようにする

ライブラリ上にTextLayoutを追加する

ドキュメントクラスをこんな感じにするとできた!!!!!!!!!!!

package  
{
	import flash.display.Graphics;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.text.engine.FontLookup;
	import flash.text.engine.FontWeight;
	import flash.text.Font;
	import flashx.textLayout.edit.SelectionManager;
	import flashx.textLayout.elements.ParagraphElement;
	import flashx.textLayout.elements.SpanElement;
	import flashx.textLayout.formats.LineBreak;
	
	import flashx.textLayout.container.DisplayObjectContainerController;
	import flashx.textLayout.conversion.ImportExportConfiguration;
	import flashx.textLayout.conversion.TextFilter;
	import flashx.textLayout.edit.EditManager;
	import flashx.textLayout.elements.Configuration;
	import flashx.textLayout.elements.TextFlow;
	import flashx.textLayout.formats.CharacterFormat;
	import flashx.textLayout.formats.TextDecoration;
	
	/** Demonstrates customizing the Configuration used by the importer */
	public class Main extends MovieClip
	{
		public var fontUrl:URLRequest;
		private var MyVerdana:Class;
		private var MyVerdanaBold:Class;
		
		public function Main()
		{	
			load();
		}
		
		private function load():void
		{
			var context:LoaderContext = new LoaderContext();
			context.applicationDomain = ApplicationDomain.currentDomain;
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.INIT, fontLoaded);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, showError);
			fontUrl = new URLRequest("FontEmbed.swf");
			loader.load(fontUrl, context);
		}
		
		function fontLoaded(e:Event):void
		{
			MyVerdana = ApplicationDomain.currentDomain.getDefinition("MyFont_MyVerdana1") as Class;
			MyVerdanaBold = ApplicationDomain.currentDomain.getDefinition("MyFont_MyVerdana2") as Class;
			Font.registerFont(MyVerdana);
			Font.registerFont(MyVerdanaBold);
			
			addText();
		}
		
		private function addText():void
		{
			var textFlow:TextFlow = new TextFlow();
			var p:ParagraphElement = new ParagraphElement();
			textFlow.addChild(p);
			
			var span:SpanElement = new SpanElement();
			span.text = "Hello, World ParagraphElement";
			span.fontSize = 36;
			span.fontFamily = Font(new MyVerdana()).fontName;
			span.fontLookup = FontLookup.EMBEDDED_CFF;
			p.addChild(span);
			
			var span2:SpanElement = new SpanElement();
			span2.text = "Hello2, World ParagraphElement";
			span2.fontSize = 36;
			span2.fontFamily = Font(new MyVerdanaBold()).fontName;
			span2.fontLookup = FontLookup.EMBEDDED_CFF;
			p.addChild(span2);
			
			textFlow.flowComposer.addController(new DisplayObjectContainerController(this, 400, 400));
			textFlow.flowComposer.updateAllContainers();
		}
		
		function showError(e:Event):void
		{
			trace("Error opening: " + fontUrl.url);
		}
	}
}

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る