首页 文章

在Adobe Flex中,为什么嵌入式字体版本的行为与系统中安装的相同字体不同

提问于
浏览
2

场景:

Flex应用程序利用@ font-face声明嵌入字体 . (嵌入字体需要能够旋转文本 . )

该应用程序最初是作为英语应用程序开发的,但在本地化期间,有必要找到能够显示亚洲字符的unicode字体 . 应用程序的原始实现使用四种字体来满足字符强调的各种排列 . Bold,Bold Italic,Italic和Normal都是通过Arial系列中相应的Arial字体提供的 .

问题:

当尝试将字体编译成可用于粗体,斜体和粗体斜体的字体时(是的,它不是理想的,这只是一个测试,看它是否可以完成):

@font-face { src:url("/fonts/ArialUnicode.ttf"); 
             fontFamily: myFamily;
             fontWeight: normal;
             fontStyle: normal;
             advancedAntiAliasing: true; }

@font-face { src:url("/fonts/ArialUnicode.ttf"); 
             fontFamily: myFamily;
             fontWeight: bold;
             fontStyle: normal;
             advancedAntiAliasing: true; }

etc.

问题是,在编译应用程序时,Flex会变得暴躁,并提供以下错误消息:

[ERROR] /dirpath/Style.css:[49,-1] exception during transcoding: Font for alias 'myFont' with italic style was not found at: file:/dirpath/fonts/ArialUnicode.ttf

因此,经过一些调查,确定由于Unicode既不支持Italics也不支持Bold,因此当Flex编译器尝试嵌入字体时,它会因为无法在指定位置找到满足css要求的字体而感到不快 .

现在,当font-face声明恢复到最简单的形式时:

@font-face { src:url("/fonts/ArialUnicode.ttf"); 
             fontFamily: myFamily;
             fontWeight: normal;
             fontStyle: normal;
             advancedAntiAliasing: true; }

一切编译好,应用程序显示所有正常的重量,正常风格的亚洲字符罚款 . 但是,当在样式表中显示要以粗体或斜体显示的内容时,会出现一个框,表示没有嵌入字体,也没有任何可以在这些样式中呈现该字符的系统字体 .

现在这里变得奇怪了 .

如果在系统上安装完全相同的Unicode字体,它将开始以粗体和斜体显示亚洲字符 . 这没有任何意义,因为当Flex试图嵌入该字体以满足上述css样式时,Bold和Italic字符不在字体中 . 然而很明显,这个字体被用来显示粗体和斜体字符,就像它们在作为系统字体安装之前只是盒子一样 . 这是某种Flex伏都教吗?如果是这样,我可以通过某种方式以编程方式调用所述voodoo,因为我不能依赖用户必须出去并在他们的系统上安装unicode字体 .

编辑:以下是一些可能澄清问题的进一步信息 .

我的问题不是我们如何为罗马字符做多个字体和权重,它是“Flex如何将粗体和斜体应用于系统字体 . 当它说这种字体在尝试嵌入时不支持那些字体时更是如此那个字体 . “

使问题可重现的步骤如下:

  • 仅将MS Arial Unicode嵌入到应用程序中并进行部署 .

  • 在新的Windows 2003计算机上,打开Firefox并选择日语 .

  • 导航到应用程序URL并查看粗体和斜体应该是的框 .

  • 现在退出Firefox . 将MS Arial Unicode字体安装到Windows 2003系统中 .

  • 打开Firefox并重复 . 曾经是盒子的区域现在是粗体/粗体斜体/斜体日文字符 .

问题不在于如何解决这个问题 . 有很多可行的解决方案 . 然而,我真正想知道的是Flex如何将粗体和斜体应用于它所说的不支持粗体或斜体的字体 .

谢谢,C

1 回答

  • 5

    问题是您为所有四种字体变体指定了相同的文件名 . 单个ArialUnicode.ttf文件仅包含一个变体 .

    使用c:\ Windows \ fonts目录中的名称,您希望嵌入arial.ttf,arialbd.ttf,arialbi.ttf和ariali.ttf . 这些分别是正常,粗体,粗体斜体和斜体变体 .

    请注意,从技术角度和法律角度来看,并非所有字体都可以自由嵌入 .

    法律方面是字体是软件,因此需要像您在程序中包含的任何其他第三方代码一样获得许可 . 您可能希望查看Bitstream Vera字体系列,因为它们是自由许可的 . 该系列功能强大,旨在用作Linux等核心字体 .

    技术方面是这些规则被纳入TTF和OTF文件格式,而Flex编译器等工具遵守文件中声明的许可限制 . 如果字体标记为“未嵌入”,则不会让您嵌入它 .

相关问题