2

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

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

整个项目中的许多 spark 控件都需要使用这种特殊字体(这就是为什么 embedAsCFF 设置为 true 的原因,尽管我相信这个参数无论如何都是可选的)。但是,当它在其 fontFamily 属性中设置时,没有一个 spark 组件显示此字体。我在为每个尝试设置字体的 spark 组件编译时收到此错误:

警告:为 (controlName) 指定的嵌入字体“DroidSans”不兼容。该组件要求使用 embedAsCff=true 声明嵌入的字体。

奇怪的是,即使 embedAsCFF 设置为 true,上述字体也适用于 mx 组件(根据我在这个主题上的查找,对于 mx 组件应该设置为 false,对于 spark 应该设置为 true)。

上面的代码也可以在 Flash Builder 中运行,但是,这个项目需要使用开源 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”属性 - 它似乎有效。

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

4

3 回答 3

0

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

于 2011-01-17T08:58:23.310 回答
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 也是如此 - 也从未对我有用。

于 2011-05-30T15:11:34.447 回答
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 文件使用类似的配置,即上面的链接):

<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> 

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

于 2013-09-09T11:29:35.573 回答