如何获取字体的 PostScript 名称?

6
我正在为我的应用程序添加在生成的PDF中嵌入TrueType字体的可能性,但字体"Sitka Text"(以及它的变体“Sitka Banner”,“Sitka small”等)和"Meiryo"不会被嵌入。
我认为这是因为我正在使用LOGFONT对象的名称,对于这些字体,我应该使用PostScript名称。
如何获取PostScript名称?
我使用GetFontData获取了'name' table,但结果没有返回任何可用的名称。
是否有任何WINAPI方法可以给我那个名称?

编辑:我只向我的用户显示具有嵌入权限“可编辑”和“可安装”的字体,这些权限是我使用方法EnumFontFamiliesEx及其CALLBACK函数获得的。

我还检查了NEWTEXTMETRIC ntmFlags,它显示我的所有字体都是NTM_TT_OPENTYPE。

编辑2:不嵌入意味着PDF阅读器不会将我的字体显示为嵌入式(Acrobat不会显示任何文本)

错误示例

已解决
首先,我想感谢Michael Mckeough和mkl,你们真棒,帮了我很多忙。我检查了原始字体,发现它并没有损坏,也没有更改字体字节,但最终我注意到,如果你调用GetFontData到一个(.ttc)文件,它将裁剪掉ttcf部分,没有PDF阅读器能够理解这是什么字体。


1
“字体未嵌入” - 这是什么意思?应用程序拒绝了这些字体吗?如果是这样,您应该找出原因,毕竟这是您的应用程序。查看器是否拒绝了您的应用程序创建的PDF?如果是这种情况,您应该分享一个示例PDF,以便其他人可以重现此问题。 - mkl
1
您的示例 PDF 文件中嵌入的字体似乎已损坏。Font Forge 和 Font Validator 工具都无法解析它。您确定原始字体没有受损吗?还是您的嵌入代码在某种程度上对字体进行了处理? - mkl
1个回答

6
理想情况下,您可以在字体的“名称”表中找到这个信息。它将是nameId 0x0006,在适合您平台的形式中。名称表的格式是TrueType和OpenType规范的一部分。(您可以在此处找到副本 Microsoft Typography OpenType spec Name)。表中可能有大量条目,也可能很少。特别地,Postscript名称可能存在于任何给定字体中,也可能不存在。您需要查找nameID为0x0006的表格,以及您可以使用的形式(语言、平台、编码方式)。对于Postscript名称,您最有可能希望它们是英文、ASCII编码的,适用于任何平台。
然而,字体无法嵌入的原因不太可能是这个!更常见的原因是不允许嵌入此字体。在Microsoft Typography OpenType Spec OS/2中,您会看到一个名为fsType的字段。该字段包含指示此字体被许可嵌入的情况下的标志。如果这些标志表明它未获得许可,则没有信誉良好的工具会嵌入或子集化此字体。

我发现“Sitka Text”是Windows 10字体,由Windows免费分发。它似乎不太可能没有嵌入许可。有趣的是,我通常用于快速“查看”字体的工具(Font Validator,曾经可以从Microsoft Typography获取,但似乎已经不存在了)告诉我OS/2记录无效。它指定了类型5,而规范说类型4是最新的。对于嵌入请求的正确响应需要访问fsType字段,如果记录格式未知,则应“安全失败”,并拒绝嵌入字体。

所以这很可能是字体无法嵌入的原因。

1
另外顺便提一下,Font Validator 确实表示名称表已经存在,正确,并且包含 Postscript 名称。但它并没有告诉我它们是什么。 - Michael Mckeough
谢谢您的回答!我正在检查字体嵌入权限,所以我相信不是这个问题。我按照TrueType字体的PDF手册嵌入我的字体,您知道Sitka和例如“Comics Sans”之间有什么区别会使嵌入过程不同吗?例如,我认为两种字体都是TrueType字体,对吗? - Penachia
1
Comic Sans也是一种TrueType字体。它具有Type3 OS/2记录和可编辑嵌入的fsType。我看到两者之间唯一的真正区别在于OS/2表的类型。 - Michael Mckeough
1
我的工具集嵌入Sitka没有任何问题。它根本不检查OS/2记录的类型。它将PostScript名称显示为“SitkaText”。 - Michael Mckeough
2
"Font Validator曾经可以从Microsoft Typography获取,但似乎已不再提供。它似乎已转移到GitHub,而更活跃维护的分支在这里。" - mkl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接