ActionScript 3&字体嵌入

时间:2009-10-15 01:25:24

标签: actionscript-3 fonts embedding

我在动作3项目中进行正确的字体嵌入时遇到问题(flash CS4,而不是flex)。

我按照Adobe指南进行字体嵌入: http://www.adobe.com/devnet/flash/quickstart/embedding_fonts/

指南告诉我们将Textfield.embedFonts属性设置为true。如果我这样做并尝试在此文本字段中显示另一种字体的文本,则不显示任何内容 - 这很好,我希望它是这样的。

但现在我遇到了这个特殊问题:

我在常规样式中嵌入字体“Arial”并在舞台上创建两个输入文本字段。其中一个我将embedFonts属性设置为true(如指南中所述),另一个我按原样保留。现在我将该东西发布为swf并尝试在文本字段中输入以下(土耳其语)字符串

YeniYılınBarışveMutluluk Getirmesini Dileriz。

现在的问题是,未触动的文本字段正确显示字符串 - 但是embedFonts设置为true的字符串缺少一些字母(例如ş未显示)。但Arial字体确实有这个字母,因为它在静态中正确显示 - 那么为什么我设置这个属性时没有正确呈现(如指南中所述)?

在我的最终应用程序中应该有一个textField,但是有多个嵌入字体和一种在它们之间切换的方法(例如用户必须能够选择另一种字体来输入中文文本)。

有人可以告诉我如何正确地做到这一点吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

在Flash中嵌入字体并不像应该的那样简单,并且有一些特殊情况......确保嵌入字体的正确字符的一种方法是启用“生成大小报告” Flash发布设置....您将看到所有嵌入字体的所有字符。唯一的例外是使用[EMBED标签嵌入的字体不会显示在那里。

将字体添加到库中并不会嵌入该字体的整个字符集(例如Arial约为8mb)...它只嵌入了它们的一部分...我不确定它是否总是标准的西方拉丁语集,或者它取决于计算机语言。 您可以使用影片中的任何文本字段手动扩展此设置(使用“字符嵌入...”对话框),只要您使用实际的库字体名称(它在字体列表中显示末尾的星号...在你的情况下,它将是“Arial *”)。

你也可以使用带有unicodeRange的[EMBED标签来声明de字符集,但请记住,你在那里声明的字体在编辑期间不会在Flash IDE中可用...你需要在运行时设置它们使用ActionScript(TextFormat,StyleSheet等),这在使用Flash时不太实用。

答案 1 :(得分:2)

我使用系统字体,并避免使用Arial等嵌入式字体。

  public function get availableFonts(): Array
  {
     var font: Font = null;
     var allFonts: Array = Font.enumerateFonts(true).sortOn("fontName", Array.CASEINSENSITIVE);
     var embeddedFonts: Array = Font.enumerateFonts(false);

     var excludeList: Object = {}
     for each(font in embeddedFonts)
     {
        excludeList[font.fontName] = '';
     }

     var ourFonts: Array = [];
     for each(font in allFonts)
     {
        if (!excludeList.hasOwnProperty(font.fontName))
        {
           ourFonts.push(font);
        }
     }

     return ourFonts;
  }

此返回的字体列表将包含所有字母。

(如果ActionScript有一些更简单的内置设置差异的方法会不会很好?)

答案 2 :(得分:0)

如果您正在寻找可以在运行时加载不同字体的更强大的字体加载解决方案,我已在此处发布了一些代码(http://labs.tomasino.org/2009/07/16/flash-as3-runtime-font-manager/)以及如何使用它的说明。