首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Adobe中,为什么嵌入式版本的字体与系统中安装的字体不同?

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

Stack Overflow用户
提问于 2010-04-27 13:14:26
回答 1查看 2.4K关注 0票数 2

设想情况:

使用@字体面声明嵌入字体的Flex应用程序。(嵌入式字体需要能够旋转文本。)

该应用程序最初是作为英语应用程序开发的,但在本地化过程中,需要找到能够显示亚洲字符的unicode字体。应用程序的原始实现使用四种字体来满足字符强调的不同排列。粗体、粗体、意大利和普通都是通过Arial家族中相应的Arial字体提供的。

问题:

当尝试将字体编译为粗体、斜体和粗体斜体时,可以通过类似的方法(是的,这并不理想,这只是一个测试,看看是否可以这样做):

代码语言:javascript
运行
复制
@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要求的字体。

现在,当字体声明恢复到最简单的形式时:

代码语言:javascript
运行
复制
@font-face { src:url("/fonts/ArialUnicode.ttf"); 
             fontFamily: myFamily;
             fontWeight: normal;
             fontStyle: normal;
             advancedAntiAliasing: true; }

所有的编译都很好,应用程序显示所有正常的重量,正常风格的亚洲字符。但是,当在样式表中以Bold或意大利语显示要显示的内容时,会出现一个框,表示没有嵌入式字体或任何系统字体可以在这些样式中呈现该字符。

现在是奇怪的地方了。

如果系统上安装了完全相同的Unicode字体,则开始以粗体和斜体显示亚洲字符。这是没有意义的,因为Bold和意大利字符不在字体中,Flex试图嵌入该字体以满足上述css样式。但是很明显,这种字体被用来显示粗体和斜体字符,就像它们只是安装为系统字体之前的方框一样。这是某种伏都教吗?如果是这样的话,我是否有办法以编程方式调用,巫毒说,因为我不能依赖用户必须走出去,并获得安装在他们的系统上的unicode字体。

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

我的问题不是如何为罗马字符做多字体面和权重,而是“Flex如何将粗体和斜体应用于系统字体。更重要的是,当它说字体在试图嵌入该字体时不支持这些字体。”

使该问题可复制的步骤如下:

  1. 只将MS Arial Unicode嵌入应用程序并部署它。
  2. 在一台新的Windows 2003机器上,打开Firefox并选择日语。
  3. 导航到应用程序URL,并查看粗体和斜体应该显示的框。
  4. 现在退出Firefox。将MS Arial Unicode字体安装到Windows 2003系统中。
  5. 打开Firefox并重复。过去是方框的区域,现在是粗体/粗体斜体/斜体日语字符。

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

谢谢你,C

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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编译器这样的工具遵守文件中声明的许可限制。如果字体标记为“”,它将不允许您嵌入它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2721461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档