2010/03/12

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

基本は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);
		}
	}
}

コメント / トラックバック 1 件

  1. [...] こちらの記事を参考にさせて頂きました。ありがとうございます。 http://119.245.215.115/blog/2010-03-12/1659 [...]

コメントはお気軽にどうぞ!(コメントのみも受け付けてます)

ページトップへ戻る