Flash字体嵌入方法总结—(2)ActionScript基础篇
在上一篇使用字体元件的时候,我们接触到了TextField对象的embedFonts属性。在这里,我们进一步的探讨一下怎么在ActionScript中使用嵌入文本。
一旦我们在Flash IDE中嵌入了字体,swf文件中就包含了该字体的矢量信息。ActionScript也可以使用这些信息。继续上文的例子,我们添加如下代码:
var fmt:TextFormat = new TextFormat();fmt.font = "STZhongsong";//华文中宋fmt.size = 36;fmt.color = 0x336699;var txt:TextField = new TextField();txt.text = "中文字型测试";txt.autoSize = TextFieldAutoSize.LEFT;txt.embedFonts = true;txt.setTextFormat(fmt);addChild(txt);
我们用ActionScript建立了一个文本框,内容为“中文字型测试”,字体为“华文中宋”。因为“测试”这两个字体信息没有被嵌入,所以不会被渲染出来。再来看看使用css的两种用法:
var style:StyleSheet = new StyleSheet();style.parseCSS("foo{font-family:STZhongsong;font-size:36;color:#336699}");// 用法1var fmt:TextFormat = style.transform(style.getStyle("foo"));txt.text = "中文字型测试";txt.setTextFormat(fmt);// 用法2//txt.styleSheet = style;//txt.htmlText = "<foo>中文字型测试</foo>";
两种方式都可以把格式赋给文本框,但是和TextFormat方法一样的是需要注意字体的名字不是我们在IDE里看到的“华文中宋”,而是字体的英文名"STZhongsong"。如何找到字体的英文名可以到字体目录里去查看信息,也可以用我在下一篇进阶篇中介绍的方法。
以上总结的是ActionScript使用嵌入字体的方法,但都是基于在IDE中完成了字体嵌入的操作的。下面我们来看看另外的方法:使用Flex SDK。
首先大家都应该看看gotoAndLearn上的这篇视频教程,Lee非常详尽的介绍了使用Runtime Font Loading的方法。通过使用Flex SDK,使得在ActionScript中嵌入字体变为可能。我们来看看嵌入字体所使用的代码:
[Embed(systemFont="Arial", fontName="MyArial", unicodeRange="U+0020-U+007e", mimeType="application/x-font")]var ClassName : Class;
在这两行代码中,我们创建了一个虚拟字体"MyArial"。和在IDE中的操作效果一样,映射的是系统字体Arial的标准形式。unicodeRange 是我们所需要的重要参数,它界定了嵌入字符的范围。"U+0020"这类的数字表示字符的unicode编码,虽然没有在IDE里面直观,但是我们可以用教程里提到的在线工具作为辅助。
经过一番搜索,发现了polyGeek上开发了一个for Flex css的字体嵌入工具。根据他的算法,我改写了一个输出Embed标签的,并加入了一些汉字用的范围,完善了更多功能,命名为:Flash中文字体嵌入助手。
如果你使用Flex SDK编译的话,可以用这个工具生成的类代码,建立一个自己的FontLibrary。在要使用这个字体的地方,只要在文档类中包含一个对FontLibrary的引用,就可以把字体一起编译进来。更多使用FontLibrary的方法和思路,我们在下一篇深入讨论。
此外还需要提一下字体的变体样式。Flex SDK同样支持嵌入斜体或粗体,但是如果是使用外部字体嵌入,使用变体会在编译时报错,同样的设置用系统字体则没有问题。提醒大家使用的时候注意一下。