以前の記事に述べた 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 とリネームすれば、コンパイルすることができました。
σημείο πήξεως は日本語の「氷点」に当たる。