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应用粗体和斜体的系统字体.更所以,当它说,试图嵌入时字体不支持那些那个字体."
使问题可重现的步骤如下:
问题不在于如何解决这个问题.有很多可行的解决方案.然而,我真正想知道的是Flex如何将粗体和斜体应用于它所说的不支持粗体或斜体的字体.
谢谢,C
问题是您为所有四种字体变体指定了相同的文件名.单个ArialUnicode.ttf文件仅包含一个变体.
使用c:\ Windows\fonts目录中的名称,您希望嵌入arial.ttf,arialbd.ttf,arialbi.ttf和ariali.ttf.这些分别是正常,粗体,粗体斜体和斜体变体.
请注意,从技术角度和法律角度来看,并非所有字体都可以自由嵌入.
法律方面是字体是软件,因此需要像您在程序中包含的任何其他第三方代码一样获得许可.您可能希望查看Bitstream Vera字体系列,因为它们是自由许可的.该系列功能强大,旨在用作Linux等核心字体.
技术方面是这些规则被纳入TTF和OTF文件格式,而Flex编译器等工具遵守文件中声明的许可限制.如果字体标记为"未嵌入",则不会让您嵌入它.