[AS]TLF用にCFF形式のフォントを埋め込んだSWFがどうやっても作れない
→解決!!!
※2010/03/09/14:49 解決(一番下に追記):クリック
TLF(TextLayoutFramework)を使ったときにフォントを埋め込むにはCFFでトランスコードしたフォントを埋め込んだSWFを作って、そのSWFからフォントを読み込むという手順らしい。
が、しかし、そもそもこの形式でSWFが書き出せない。
具体的には、
Unable to transcode
とトランスコードできないというエラーになる。
まずは↓を見て同じようにやってみただけど、上記エラー
TextlayoutFrameworkやFlash.text.engineで埋め込みOpenTypeフォントを使う方法:高橋文樹.com
つぎに↓を見つけ、同様の古いSDKで試してみるも、やっぱり上記エラー。。。
新テキストエンジンFlash.text.engineでOpenTypeのフォントを埋め込みで使う:SIHOのActionScript勉強メモ
SDKもいろいろ試してみた。
flex_sdk_4.0.0.4021
flex_sdk_4.0.0.4904
flex_sdk_4.0.0.7219(Beta1)
flex_sdk_4.0.0.10485(Beta2)
・・・全滅
上記、SHIHOさんはMACでやられてるようなので、MACでも試してみた。
でもだめ。。。
意味がわからん、どうしようもないわ。
原因がわかりそうな方、ぜひアドバイスをお願いします。。。
※試してみた環境
◆コンパイラ
flex_sdk_4.0.0.4021
flex_sdk_4.0.0.4904
flex_sdk_4.0.0.7219(Beta1)
flex_sdk_4.0.0.10485(Beta2)
◆実行ツール
FlashDevelop(3.0.6) + Flex4SDK (AS3プロジェクト)
FlexBuilder + Flex4SDK (ASプロジェクト)
◆OS
Win XP SP3
Mac OS10.6(FlexBuilder + flex_sdk_4.0.0.4021でのみ実行 )
◆メインAS
//swfの書き出し先にfontフォルダをつくりその中にA-OTF-ShinGoPro-Regular.otfという名前のフォントファイルを配置。 package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { [Embed(source = "font/A-OTF-ShinGoPro-Regular.otf", fontName = "Shingo", cff = "true")] //最新のSDKを使うときは、cffをembedAsCFFに変更して試した //[Embed(source = "font/A-OTF-ShinGoPro-Regular.otf", fontName = "Shingo", embedAsCFF = "true")] public static var font:Class; public function Main():void { trace("Main.Main"); } } }
※2010/03/09/12:27追記
taigaさんにアドバイスを頂き、明示的にプレイヤー10にしてなかったことに気付きました。。
FlexBuilder:追加コンパイラ引数に、-target-player=10.0.12を追加
FlashDevelop:project>property>output>TargetをFashPlayer10に変更
(setting>AS3Context>Language>DefaultFlashVersionも10)
さらにモリサワ系のフォントはダメっぽいとの助言も頂き、taigaさんの記事で実績のある小塚明朝に。
メインASもtaigaさんの記事のものを拝借し、以下に更新
package { import flash.display.Sprite; public class Main extends Sprite { [Embed( source = "font/KozMinPro-Bold.otf", fontName = "testFont", mimeType = "application/x-font", embedAsCFF = "true", advancedAntiAliasing = "true" //unicodeRange = "U+5927, U+96c5" 大雅 )] public static const FONT:Class; } }
で、結果は変わらずで同じエラーのまま。
×が消えず。
うーんなんでだろう。
ちなみにコンパイラは最新のSDKを仕様
※2010/03/09/14:03追記
FlashBuilderで試してみては?という助言のもとトライ。
FBインストール後、プロジェクトプロパティのASコンパイラーのPlayerオプションを以下のように設定。
プロジェクト作って、メインのASにソースをコピペ。
bin-debugフォルダにfontフォルダを作って、小塚フォントを設置。
まずはデフォルトのSDKで試すもいつものエラー。。。。
SDKをBeta2(flex_sdk_4.0.0.10485)に変更してみるも結果は同じ。。。
フォント含んだswfの書き出しは都市伝説なんじゃないかと思えてきた。。。
※2010/03/09/14:49追記
taigaさんからのご指摘で解決しました!
結論からいうと、srcフォルダにfontファイルを置いてなかったから。
Embedは埋め込みなので、コンパイル環境であるsrcにおいてないとダメだそうな。
bin-debugに置くのは、swfから読み込む場合だったね。
あー、なんという無能っぷり。
※2010/03/09/17:44 さらに追記
FlashDevelopで、同じように実行してみると、
Warning: This compilation unit did not have a factoryClass specified in Frame metadata to load the configured runtime shared libraries. To compile without runtime shared libraries either set the -static-link-runtime-shared-libraries option to true or remove the -runtime-shared-libraries option.
Build halted with errors (fcsh).
のようにWarningがでた。
これの解決は↓の方が書いてくれてました。
Flex 4で画像の埋め込みでエラー & flex-config.xmlのバージョンアップ:sub Diary (仮)
素直にコンパイルの引数に”-static-link-runtime-shared-libraries=true”を書く
これをFlashDevelopに適応してみたら上記エラーはでなくなった。
愚弟的には、
Project>Property>Compiler Optionsタブ>Advanced>AdditionalCompilerOptions>String[]配列に
-static-link-runtime-shared-libraries=true
を追加。
たぶんこれで大丈夫・・・?
とおもったら、どうやらだめっぽい。
エラーはでてないけど、生成されたswfにはFontが内包されてないっぽい。
とりあえずはFB4で作った方がいいね。
FlashDevelopでの実行についてはあとで検証する。
sub Diary (仮)さんとこの解決事項でまだ試してないのもあるしね。
Tweet