设想:
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 既不支持斜体也不支持粗体,因此当 Flex 编译器尝试嵌入字体时,它会变得不高兴,因为它无法在指定位置找到满足 css 要求的字体。
现在,当字体声明恢复为最简单的形式时:
@font-face { src:url("/fonts/ArialUnicode.ttf");
fontFamily: myFamily;
fontWeight: normal;
fontStyle: normal;
advancedAntiAliasing: true; }
一切编译正常,应用程序显示所有正常重量、正常样式的亚洲字符。但是,当在样式表中显示要以粗体或斜体显示的内容时,会出现一个框,表示没有嵌入字体,也没有任何系统字体可以在这些样式中呈现该字符。
现在这是变得奇怪的地方。
如果系统上安装了完全相同的 Unicode 字体,它将开始以粗体和斜体显示亚洲字符。这是没有意义的,因为当 Flex 尝试嵌入该字体以满足上述那些 css 样式时,字体中没有粗体和斜体字符。然而很明显,这种字体被用来显示粗体和斜体字符,就像在它作为系统字体安装之前它们只是框一样。这是某种 Flex 巫术吗?如果是这样,是否有某种方法可以以编程方式调用所述巫毒教,因为我不能依赖用户必须外出并在他们的系统上安装 unicode 字体。
编辑:这里有一些进一步的信息可以澄清这个问题。
我的问题实际上并不是我们如何为罗马字符设置多种字体和粗细,而是“Flex 如何将粗体和斜体应用于系统字体。当它说该字体在尝试嵌入时不支持这些字体时更是如此那个字体。”
使问题可重现的步骤如下:
- 仅将 MS Arial Unicode 嵌入到应用程序中并进行部署。
- 在新的 Windows 2003 机器上,打开 Firefox 并选择日语。
- 导航到应用程序 URL 并查看粗体和斜体应位于的框。
- 现在退出 Firefox。将 MS Arial Unicode 字体安装到 Windows 2003 系统中。
- 打开 Firefox 并重复。曾经是方框的区域现在是粗体/粗斜体/斜体日文字符。
这不是如何解决这个问题。有很多可行的解决方案。然而,我真正想知道的是 Flex 如何将粗体和斜体应用于它说不支持粗体或斜体的字体。
谢谢, C