Flex 4嵌入Spark组件的字体

时间:2011-01-06 12:36:11

标签: flex4 embedded-fonts

我在使用Open Source Flex 4.5 SDK(Hero)嵌入字体时遇到问题,尽管与Flex 4 Open Source SDK存在相同的问题。我已经将一些ttf文件添加到我的项目结构的assets目录中,并尝试访问我的CSS文件中的字体,如下所示:

@font-face { 
src: url("../assets/DroidSans.ttf"); 
fontFamily: DroidSans;
embedAsCFF: true; 
}

这个特定的字体需要在整个项目中用于许多火花控制(这就是为什么embedAsCFF被设置为true,尽管我认为这个参数是可选的)。但是,当在fontFamily属性中设置时,没有任何spark组件显示此字体。我在编译我尝试设置字体的每个spark组件时遇到此错误:

  

警告:嵌入字体不兼容   'DroidSans'指定   (controlName)。这个组件   要求嵌入字体   用embedAsCff = true声明。

奇怪的是,即使embedAsCFF设置为true,上面的字体也适用于mx组件(根据我对此主题的看法,对于mx组件应该设置为false,对于spark应该设置为true)。

上述代码也可以在Flash Builder中使用,但是,这个项目需要使用Open Source SDK进行开发,但它失败了。

有什么想法吗?当然其他人有同样的问题吗?

运行以下脚本时,会显示字体是“嵌入式”的,但不是“CFFEmbedded”。 adobe文档说这些需要说“CFFEmbedded”

var fontArray:Array = Font.enumerateFonts(false); 
trace("Fontarray length: " + fontArray.length); 
for(var j:int = 0; j < fontArray.length; j++) { 
    var thisFont:Font = fontArray[j]; 
    trace("FONT " + j + ":: name: " + thisFont.fontName + " embedded as type:" + thisFont.fontType + "."); 
} 

由于

鲍勃

[编辑]

好的 - 我终于设法嵌入了字体。我尝试过来自CS4的SWC,来自Flash Builder 4的SWC,来自CS4和Flash Builder的SWF ....

最终修复

1)将字体打包到Flash Builder 4中的SWF中 2)使用以下CSS

引用编译的SWF
    @font-face {
        cff: false;
        src: url('../bin/DroidSansFont.swf');
        fontFamily: DroidSansMX;
    }

    @font-face {
        cff: true;
        src: url('../bin/DroidSansFont.swf');
        fontFamily: DroidSans;

    }

疯狂的是 - 使用“cff:true”指令。所有文档都说使用“embedAsCFF”。这会引发错误,同时使用“cff”属性 - 它似乎有效。

我不知道 - 任何人都可以提出一些想法吗?

3 个答案:

答案 0 :(得分:0)

可能您使用的是较旧的SDK和编译器,“cff”在最新的SDK版本中被重命名为“embedAsCFF”,从构建Flex SDK 4.0.7972版本开始,请参阅此讨论http://forums.adobe.com/thread/36399以获取Flex SDK的评论工程师,证明

答案 1 :(得分:0)

我有一个非常类似的问题,但我无法加载任何已编译的SWF字体文件(Flex SDK 4.1)。最后,我能够使用以下代码解决此问题:

MXML:

<fx:Style>
    @namespace s "library://ns.adobe.com/flex/spark";
    @namespace mx "library://ns.adobe.com/flex/mx";
    @font-face {
        src: url("fonts/files/HelveticaNeueLTPro-Md.otf");
        font-family: HelveticaNeueLTPro-Md;
        embed-as-cff: true;
    }

    @font-face {
        src: url("fonts/files/HelveticaNeueLTPro-Bd.otf");
        font-family: HelveticaNeueLTPro-Bd;
        embed-as-cff: true;
    }

    .helvetica {
        font-family: HelveticaNeueLTPro-Md;
        font-lookup: embeddedCFF;
    }
    .helveticaBold {
        font-family: HelveticaNeueLTPro-Bd;
        font-lookup: embeddedCFF;
    }
</fx:Style>

如您所见,这是针对OpenType格式的HelveticaNeue字体(常规和粗体),但我也成功使用了TrueType。重要的CSS属性是“ font-lookup:embeddedCFF ”。一旦我没有设置它,编译工作但嵌入的字体从未显示。同样适用于加载由fontswf实用程序创建的SWF - 对我来说也没用。

答案 2 :(得分:0)

所描述的问题可能是由于使用一组默认的字体管理器引起的。您需要使用 CFFFontManager 。通常,您可以定义所有四个可能的管理器以允许一些回退。这通常是MX应用程序尝试使用spark组件的问题。

另见:http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7e09.html

可能:https://docs.sonatype.org/display/FLEXMOJOS/Using+Adobe+Font+Manager+to+embed+fonts

随后是Flexmojos的配置(你可以使用类似的flex-config.xml文件,上面的viz链接):

<fonts> 
  <managers> 
    <manager-class>flash.fonts.JREFontManager</manager-class> 
    <manager-class>flash.fonts.BatikFontManager</manager-class> 
    <manager-class>flash.fonts.AFEFontManager</manager-class> 
    <manager-class>flash.fonts.CFFFontManager</manager-class> 
  </managers> 
</fonts> 

请注意,首选经理位于底部。