DirectWrite 列出了 Microsoft Sans Serif 的常规、Oblique、Bold、Bold Oblique 版本,但它们都指向相同的 TTF 文件

问题描述 投票:0回答:1

因此我使用 DirectWrite API 来查询系统中可用的字体。其中一种字体是 Microsoft Sans Serif。 DirectWrite 返回此字体的四个面:Regular、Oblique、Bold 和 Bold Oblique,但是当我获取字体文件路径时,它们都指向同一个 TTF 文件。

我不是字体导出者,但我知道多种字体可以驻留在 TTC 文件中,其中字体由字体索引或类似内容标识。

我正在将字体嵌入到 PDF 文档中,因此当我需要字体的 Bold/Oblique/Bold Oblique 版本时,我最终会得到常规版本(因为它们都指向同一个文件)。

如果我使用 Microsoft Word 作为测试并指定一些文本并使用 Microsoft Sans Serif 选择文本的粗体或斜体版本,文本将按照预期改变外观。

我知道存在逻辑字体与物理字体的概念,因此一种可能性是 Microsoft Word(或 DirectWrite 或 GDI 等)实际上可能对不同的物理字体进行了某种替换,以给我一个“逻辑”粗体或Microsoft Sans Serif 的斜体版本。

或者这是不同的东西,这可能与 DirectWrite 和字体本身有关。

谁能解释一下是什么导致了我所看到的情况?

fonts gdi truetype directwrite
1个回答
0
投票

DirectWrite 将为您提供同一字体文件的多个字体,如果像您所说的那样,它是一个 TTC 集合文件,如果它是具有多个实例的可变字体,或者如果它是不提供粗体的简单单一字体 ttf/otf /italic 本身的变体。在后一种情况下,将添加模拟面孔。检查

IDWriteFontFace::GetSimulations()
返回的内容。在较新的 API 版本中,可以选择使用不同的族分组模型,但对于原始版本,它的工作原理就像我所描述的那样 - 当你没有斜体时,它将被模拟为倾斜,对于缺少粗体和粗体斜体也是如此- 将分别使用模拟粗体和模拟粗体斜线。

© www.soinside.com 2019 - 2024. All rights reserved.