0

我们有一个大型的 Flash 网站,它被翻译成 11 种语言。我们有一个字体加载系统,其中以每种语言显示网站所需的所有字符都嵌入到外部 swfs 中(所以 11 个 swfs)。

该站点的最新更新要求我们将文本布局框架 (TLF) 用于文本显示的一个区域,这当然只支持嵌入新 CFF 格式的字体。我尝试使用标签嵌入字体的第二个实例,embedAsCFF="true"在加载字体 SWF 后,我可以看到该字体已正确注册,因为它显示在由Font.enumerateFonts.

我正在使用的 TextFlow 实例具有以下属性集:

textFlow.fontLookup = FontLookup.EMBEDDED_CFF;
textFlow.renderingMode = RenderingMode.CFF;
textFlow.fontFamily = "HeadingFontCFF";

但是,显示的文本没有找到嵌入的字体。它以 Times New Roman 设备字体显示。我很确定我的 TLF 设置正确,因为当我将[Embed]标签放在与 TLF 代码相同的类中(即嵌入相同的 SWF)时,字体显示正确。所以它似乎只与加载在外部 SWF 中的字体有关。

我认为这个问题与此处列出的问题有关:使用在运行时加载的嵌入式字体的示例 Flex 4 运行时加载的模块,尽管这篇文章是指 Flex 4 构建,而我们的是纯 Flash 10 构建。

4

2 回答 2

3

好的,经过大量挖掘,我找到了答案。原来我们使用的是编译器参数

-managers flash.fonts.AFEFontManager

它指示编译器在对字体进行转码时使用 AFEFontManager,而不是默认值 (BatikFontManager/AFEFontManager/JREFontManager)。这些字体管理器获取字体文件并将它们转换为要在 Flash 中呈现的矢量轮廓。这里有更多信息:关于字体管理器

似乎包含此参数时,所有字体都使用旧的 DefineFont3 方法嵌入,而不是 DefineFont4 (CFF),即使您使用 tag embedAsCff="true"

查看实际使用哪种方法嵌入字体的一种简单方法是fontType检查Font.enumerateFonts(). 如果值为“embedded”,则使用 DefineFont3,如果值为“embeddedCFF”,则使用 DefineFont4。

希望这可以帮助那里的人!

于 2010-11-30T15:00:57.437 回答
0

我发现这非常有用:“默认情况下,MX 组件使用 TextField 进行文本显示,而 TextField 不能使用 CFF 字体。如果告诉 TextField 使用嵌入字体但没有可以使用的字体或该字符的字形,则 TextField 将显示空白在字体中。Spark 组件使用 FTE,而 FTE 需要 CFF 字体。因此将两者混合是有问题的。您可以将字体嵌入两次,分别使用 CFF true 和 false,但这不是很有效。在大多数情况下,如果您使用 MXFTEText。 css 文件或选中项目属性中的框,MX 组件将切换为使用 FTE 和 CFF 字体。” 作者:Alex Harui - 2010 年 9 月 2 日晚上 9:12

如此处所见与该主题相关的非常详细(和长)的解释。

于 2011-08-22T14:44:18.213 回答