【问题标题】:How to get a font PostScript name?如何获得字体 PostScript 名称?
【发布时间】:2018-12-11 02:39:32
【问题描述】:

我正在添加在我的应用程序生成的 PDF 中嵌入 Truetype 字体的可能性,但字体 “Sitka Text”(以及它的变体“Sitka Banner”、“Sitka small”等) ) 和 "Meiryo" 不嵌入。

我相信这是因为我使用了来自 LOGFONT 对象的名称,而对于这些字体,我应该使用 PostScript 名称。

如何获取 Postscript 名称?

我使用GetFontData 获得了'name' table,但结果没有返回任何我可以使用的名称。

WINAPI 上有什么方法可以给我这个名字吗?

编辑:我只向我的用户显示我使用方法获得的嵌入权限“可编辑”“可安装”的字体EnumFontFamiliesExCALLBACK 函数。

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

Edit2:不嵌入是指 PDF 阅读器不会将我的字体显示为嵌入的(并且 Acrobat 不会显示任何文本)

错误的example

已解决
首先,我要感谢 Michael Mckeough 和 mkl,你们太棒了,帮了我很多,我检查了我的原始字体,它没有损坏,也没有更改字体字节,但后来我终于注意到如果您将 GetFontData 调用到 (.ttc) 文件,它将裁剪 ttcf 部分,并且没有 PDF 阅读器能够理解它是什么字体。

【问题讨论】:

  • “字体......不要嵌入。” - 这是什么意思?应用程序是否拒绝字体?在这种情况下,您应该找出原因,毕竟这是您的应用程序。查看者是否拒绝您的应用程序创建的 PDF?在这种情况下,您应该分享一个其他人可以重现该问题的 PDF 示例。
  • 示例 PDF 中嵌入的字体出现损坏。 Font Forge 和 Font Validator 都被它扼住了。你确定你的原始字体没有损坏吗?还是您的嵌入代码以某种方式操纵字体?

标签: pdf winapi fonts pdf-generation


【解决方案1】:

理想情况下,您会在字体的“名称”表中找到它。它将是 nameId 0x0006,以对您的平台有用的形式。名称表的格式是 TrueType 和 OpenType 规范的一部分。 (你可以在这里找到一份副本Microsoft Typography OpenType spec Name)。表中可能有很多条目,也可能很少。特别是,Postscript 名称可能会或可能不会出现在任何给定的字体中。您需要查看表中的 nameID 为 0x0006,以及您可以使用的表单(语言、平台、编码)。对于 postscript 名称,您很可能希望它们是英文的、ASCII 编码的,适用于任何平台。

但是,字体不太可能因为这个原因没有嵌入!一个更常见的原因是嵌入这种字体是不合法的。在Microsoft Typography OpenType Spec OS/2 中,您将看到一个名为 fsType 的字段。该字段包含指示在什么情况下允许嵌入该字体的标志。没有信誉良好的工具会嵌入或子集此字体,这些标志表明它是否未获得嵌入许可。

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

所以这是字体不会为您嵌入的最可能原因。

【讨论】:

  • 附带说明,字体验证器确实说名称表存在、正确并包含 Postscript 名称。但它并没有告诉我它们是什么。
  • 感谢您的回答!我正在检查字体嵌入权限,所以我相信不是这样,我正在按照 TrueType 字体的 PDF 手册嵌入我的字体,你知道 Sitka 和“Comics Sans”之间有什么区别吗?工艺不同?例如,我相信这两种字体都是 TrueType,是吗?
  • Comic Sans 也是一种 truetype 字体。它有一个 Type3 OS/2 记录和一个可编辑嵌入的 fsType。我看到两者之间唯一真正的区别是 OS/2 表的类型。
  • 我自己的工具集嵌入了 Sitka,没有任何问题。它根本不检查 OS/2 记录的类型。它将后记名称显示为“SitkaText”。
  • “字体验证器,以前可从 Microsoft Typography 获得,但现在似乎不再可用” - 它似乎已经消失了 to github,这是一个更积极维护的分支是here
猜你喜欢
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2011-06-19
相关资源
最近更新 更多