无法在运行时在外部SWF中加载CFF嵌入字体

时间:2010-11-29 18:33:34

标签: flash actionscript-3 actionscript fonts tlf

我们有一个大型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]标签放在同一个类(即嵌入在同一个SWF中)作为我的TLF代码时,字体显示正确。所以它似乎只与外部SWF中加载的字体有关。

我认为这个问题与此处列出的问题有关:Example of using embedded fonts loaded at runtime Flex 4 runtime loaded modules,虽然这篇文章指的是Flex 4版本,而我们的版本是纯Flash 10版本。

2 个答案:

答案 0 :(得分:3)

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

-managers flash.fonts.AFEFontManager

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

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

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

希望这有助于那里的人!

答案 1 :(得分:0)

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

正如here所见,关于该主题的非常详细(和长期)的解释。