【问题标题】:Does TrueType require the 'cmap' table; must it cover all contained glyphs?TrueType 是否需要“cmap”表?它必须覆盖所有包含的字形吗?
【发布时间】:2019-12-19 03:45:21
【问题描述】:

TrueType 的字体表cmap 的目的很明确:它允许定义一种(甚至多种)方式来映射输入的“字符代码”与文件中包含的字形。

但是我想知道 TrueType 引用是否需要它的存在?此外,即使强制要求cmap 应该存在,它是否必须提供涵盖所有字形的映射?

背景 让我为那些想知道的人提供这个问题的动机: 为什么有人会认为不提供映射是明智的?
这不会使省略的(未提供映射)字形无法访问吗?有什么意义?

PDF 具有定义为 /Identity-H 的文本编码,对于 TrueType 字体,它将 16 位字从文本直接映射到字形索引(称为 GID),这意味着在将 TrueType 字体程序嵌入 pdf 文件并使用此字体的/Identity-H 编码,据我所知,cmap 表已过时,因此希望不必将其包含在我嵌入的子字体中。

【问题讨论】:

    标签: pdf truetype


    【解决方案1】:

    这里讨论了两个规范:TrueType 一种,在@JosephA 答案中引用,PDF 一种在@Jan Slabon 答案中引用。

    TrueType 规范确实将 cmap 表标记为必需,因此没有 cmap 的字体文件可以被认为是无效的。

    PDF 规范指出,在嵌入该字体时,可以从嵌入的字体子集中省略 cmap。

    对于那些不熟悉 PDF 字体嵌入的人,可以将字体完全嵌入,或者更常见的是作为子集嵌入(仅包括文件中使用的字符/字形)。

    因此,虽然 TrueType 字体需要 cmap 表,但可以将其排除在创建 PDF 过程中嵌入的子集中。

    同样需要指出的是,即使嵌入了 cmap,也只会将相关的 cmap 条目(使用的字形)添加到 PDF 文件中,从而最大限度地减少对大小的影响

    【讨论】:

      【解决方案2】:

      从 PDF 32000-1:2008 - 9.9 嵌入式字体程序:

      [...]这些 TrueType 表如果存在于原始 TrueType 字体程序中,则应始终存在:“head”、“hhea”、“loca”、“maxp”、“cvt”、“prep”、“glyf ”、“hmtx”和“fpgm”。如果与简单字体字典一起使用,字体程序应另外包含一个定义一个或多个编码的 cmap 表,如 9.6.6.4,“TrueType 字体的编码”中所述。如果与 CIDFont 字典一起使用,则不需要 cmap 表并且不应存在,因为从字符代码到字形描述的映射是单独提供的。[...]

      因此,如果 cmap 表与 CIDFont 一起使用,则不应存在。

      【讨论】:

      • @mkl 我想到了,但引用更严重。最后我真的只是简单地搜索“cmap”来找到这一段:-)
      【解决方案3】:

      TrueType 参考在表 2 中提到,'cmap' 是必需的表。我认为故意尝试创建缺少此表的 TrueType 字体并希望您可以依靠 PDF 字体字典的编码来覆盖它,我认为您会遇到麻烦。 PDF TrueType 解析代码可能不会期望 cmap 表存在,在找不到时会引发错误,等等。一般来说,我不相信 cmap 表首先会占用太多空间字体程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-15
        • 2021-09-01
        • 2013-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-12
        • 2010-12-16
        相关资源
        最近更新 更多