设想情况:
使用@字体面声明嵌入字体的Flex应用程序。(嵌入式字体需要能够旋转文本。)
该应用程序最初是作为英语应用程序开发的,但在本地化过程中,需要找到能够显示亚洲字符的unicode字体。应用程序的原始实现使用四种字体来满足字符强调的不同排列。粗体、粗体、意大利和普通都是通过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既不支持斜体也不支持Bold,所以当Flex编译器试图嵌入字体时,它会感到不高兴,因为它无法在指定的位置找到满足css要求的字体。
现在,当字体声明恢复到最简单的形式时:
@font-face { src:url("/fonts/ArialUnicode.ttf");
fontFamily: myFamily;
fontWeight: normal;
fontStyle: normal;
advancedAntiAliasing: true; }
所有的编译都很好,应用程序显示所有正常的重量,正常风格的亚洲字符。但是,当在样式表中以Bold或意大利语显示要显示的内容时,会出现一个框,表示没有嵌入式字体或任何系统字体可以在这些样式中呈现该字符。
现在是奇怪的地方了。
如果系统上安装了完全相同的Unicode字体,则开始以粗体和斜体显示亚洲字符。这是没有意义的,因为Bold和意大利字符不在字体中,Flex试图嵌入该字体以满足上述css样式。但是很明显,这种字体被用来显示粗体和斜体字符,就像它们只是安装为系统字体之前的方框一样。这是某种伏都教吗?如果是这样的话,我是否有办法以编程方式调用,巫毒说,因为我不能依赖用户必须走出去,并获得安装在他们的系统上的unicode字体。
编辑:以下是一些可能澄清问题的进一步信息。
我的问题不是如何为罗马字符做多字体面和权重,而是“Flex如何将粗体和斜体应用于系统字体。更重要的是,当它说字体在试图嵌入该字体时不支持这些字体。”
使该问题可复制的步骤如下:
问题不在于如何解决这个问题。有很多可行的解决办法。然而,我真正想知道的是,Flex如何将粗体和斜体应用到它说不支持粗体或斜体的字体。
谢谢你,C
发布于 2010-04-27 13:44:18
问题是,您为所有四个字体变体指定了相同的文件名。单个ArialUnicode.ttf文件只包含一个变体。
使用c:\Windows\fonts目录中的名称,您希望嵌入arial.ttf、arialbd.ttf、arialbi.ttf和ariali.ttf。这些分别是普通的、粗体的、粗体的斜体和斜体的变体。
请注意,并非所有字体都可以从技术和法律角度自由嵌入。
法律方面,字体是软件,因此需要获得许可,就像你在程序中包含的任何其他第三方代码一样。您可能想看看Bitstream Vera字体系列,因为它们是免费许可的。这个家族能力很强,可以作为Linux等的核心字体使用。
技术方面是,这些规则被烘焙成TTF和OTF文件格式,像Flex编译器这样的工具遵守文件中声明的许可限制。如果字体标记为“”,它将不允许您嵌入它。
https://stackoverflow.com/questions/2721461
复制相似问题