AS3和IE中的嵌入式字体:语法是否正确?

时间:2012-02-21 15:59:37

标签: actionscript-3 flex fonts embedded-fonts

我今天早上花了很多时间尝试在整个网站上找到的多种解决方案但不幸的是,它们都没有真正起作用。这是问题所在。我相信我的字体嵌入过程是有效的,因为我故意从我的机器中删除字体,我看到它们出现在flash播放器中。但是,它们没有出现在我们的Windows测试机器上(在IE或FF中),我似乎无法弄清楚原因。正如我所提到的,我尝试了整个网站上发现的几种解决方案,但似乎没有什么区别。这是我构建的类和构造函数的例外:

public class MyClass {
    [Embed(source = "../../fonts/DroidSans.ttf", 
        fontName = "DroidSans", 
        mimeType = "application/x-font-truetype", 
        fontWeight = "normal", 
        fontStyle = "normal", 
        unicodeRange =  "U+0041-U+005A, U+0061-U+007A, U+0030-U+0039, U+002E-U+002E",
        embedAsCFF = "false")]
    private var droidSansFont:Class;

    [Embed(source = "../../fonts/DroidSans-Bold.ttf", 
        fontName = "DroidSansBold", 
        mimeType = "application/x-font-truetype", 
        fontWeight = "normal", 
        fontStyle = "normal", 
        unicodeRange =  "U+0041-U+005A, U+0061-U+007A, U+0030-U+0039, U+002E-U+002E",
        embedAsCFF = "false")]
    private var droidSansBoldFont:Class;
    .
    .
    .
    public function MyClass() {
        _flVersion = String(flash.system.Capabilities.version);
        _baseFont = (_flVersion.indexOf("10,") != -1) ? "Arial" : "DroidSans";
        _boldFont = (_flVersion.indexOf("10,") != -1) ? "Arial" : "DroidSansBold";

        buttonFormat = new TextFormat();
        buttonFormat.font = _baseFont;
        buttonFormat.size = 10;
        buttonFormat.color = 0x000000;
        buttonFormat.bold = false;
        buttonFormat.align = "center";
        .
        .
        .
    }
}

如果有人能提出解决方案或指出我正确的方向,那将是最有帮助的。

1 个答案:

答案 0 :(得分:0)

您是否在TextField上设置了embedFonts = true?

小心版本测试:

_flVersion.indexOf("10,")!=-1

这可以匹配版本String中的任何位置。你否定逻辑让我有点困惑,但仔细思考,你会检查Flash Player版本中的DISABLE嵌入字体,例如:10,1,100和12,10,115

假设您打算在FP10中禁用嵌入字体,您可以将条件更改为以下(与12,10,115不匹配):

_flVersion.indexOf("10,")==0

然后我将它放在一个注释的getter函数中,以使代码更具可读性:

// No embedded fonts for flash player 10
private static var _flVersion:String = String(flash.system.Capabilities.version);
private function get use_embedded_fonts():Boolean {
  return _flVersion.indexOf("10,")!=0;
}

此外,您只需要在使用嵌入式Droid字体时设置嵌入标志,而不是Arial:

_baseFont = (!use_embedded_fonts) ? "Arial" : "DroidSans";
_boldFont = (!use_embedded_fonts) ? "Arial" : "DroidSansBold";
_embed_flag = use_embedded_fonts;

textfield.embedFonts = _embed_flag;
...