以前の記事に述べた Flex4 が大部なる故なかなか読み進められない。
そんなところに一昨日「Flex SDK 4 ではフォントの埋め込み方法が異なる」を発見。 リンクの「ActionScript入門Wiki@rsakane」で試してみる。
フォントには Shy Foundry の SF Planetary Orbiter を選んでみる。 しかし、HDD にインストールしてあるのは多分どこかのアーカーイブ・サイトからダウンロードしたもので、フォント名には空白が含まれている。
package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; public class Planetary extends Sprite { [Embed("SF%20Planetary%20Orbiter.ttf", fontName="SF Planetary Orbiter", embedAsCFF='false')] private var font:Class; public function Planetary() { var tf:TextField = new TextField(); tf.embedFonts = true; tf.defaultTextFormat = new TextFormat("SF Planetary Orbiter", 32, 0x0000ff); tf.autoSize = "left"; addChild(tf); tf.text = "LEMON"; } } }
すると、エラーでコンパイルできない。
Planetary.as(10): エラー: トランスコーディング中の例外 :Unexpected exception encountered while reading font file Planetary.as(10): col: 4: エラー: フォント'SF Planetary Orbiter' を構築できません Planetary.as(10): col: 4: エラー: SF%20Planetary%20Orbiter.ttf をトランスコードできません。
%20 で置き換えられている空白の所為だろうか?
そう思ってファイル名をリネーム(空白削除)。
SF%20Planetary%20Orbiter.ttf → SFPlanetaryOrbiter.ttf
上記の AS3 からコンパイルしたものは僅か 14kb でしかないのに、mxml にしてコンパイルすると、ナント 328kb。
この原因は mxml の冒頭ですべてのライブラリを読み込むことにあるらしい。
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns="library://ns.adobe.com/flex/spark" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="250" height="150"> <s:layout> <s:VerticalLayout horizontalAlign="center" paddingTop="20" gap="20" /> </s:layout> <fx:Script> <![CDATA[ [Embed(source='assets/SFPlanetaryOrbiter.ttf', fontName='SF Planet Orbiter', mimeType='application/x-font')] private var font1:Class; ]]> </fx:Script> <s:Label fontFamily="SF Planetary Orbiter" text="LEMON" fontSize="32" color="#0000ff" /> </s:Application>
こんな例もありました。 ギリシア語フォントなのですが、SPIONIC_.TTF というフォントがあり、これもアンダースコアで同じくエラーが返されました。
SPIONIC_.TTF → SPIonic.ttf とリネームすれば、コンパイルすることができました。
σημείο πήξεως は日本語の「氷点」に当たる。