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

Cli*_*son 2 css apache-flex unicode font-face font-embedding

场景:

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.
Run Code Online (Sandbox Code Playgroud)

问题是,在编译应用程序时,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

因此,与一些调查已经确定,由于统一既不支持也不斜体大胆,当Flex编译器试图嵌入字体,它会不高兴,因为它无法找到那个将满足CSS要求指定位置的字体.

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

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

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

现在这里变得奇怪了.

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

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

我的问题是不是真的,我们怎么办多种字体的面孔和罗马字符的权重,这是"怎样的Flex应用粗体和斜体的系统字体.更所以,当它说,试图嵌入时字体不支持那些那个字体."

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

  1. 仅将MS Arial Unicode嵌入到应用程序中并进行部署.
  2. 在新的Windows 2003计算机上,打开Firefox并选择日语.
  3. 导航到应用程序URL并查看粗体和斜体应该是的框.
  4. 现在退出Firefox.将MS Arial Unicode字体安装到Windows 2003系统中.
  5. 打开Firefox并重复.曾经是盒子的区域现在是粗体/粗体斜体/斜体日文字符.

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

谢谢,C

War*_*ung 5

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

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

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

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

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