2

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

我按照这个 Adob​​e 指南进行字体嵌入: http: //www.adobe.com/devnet/flash/quickstart/embedding_fonts/

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

但现在我有这个特殊的问题:

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

Yeni Yılın Barış ve Mutluluk Getirmesini Dileriz。

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

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

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

谢谢!

4

3 回答 3

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 有一些更简单的内置设置差异的方法不是很好吗?)

于 2009-11-20T20:16:17.067 回答
2

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

将字体添加到库中不会嵌入该字体的整个字符集(例如 Arial 大约 8mb)......它只嵌入其中的一个子集......我不确定它是否总是标准的西方拉丁语集,或者它取决于计算机语言。只要您使用实际的库字体名称(它显示在字体列表中,最后带有星号...在您的情况下,它将是“Arial *”)。

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

于 2009-10-15T10:33:52.743 回答
0

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

于 2011-11-11T18:33:09.177 回答