PdfASymbolicFontEncodingStrategy

PdfASymbolicFontEncodingStrategy class

该类描述了可用于在 TrueType 符号字体具有多个编码时为 case 调整复制编码数据过程的规则。 转换为 PDF/A 格式后的某些 PDF 文档可能会出现错误 “符号中的多个编码TrueType 字体的 cmap”。 这个错误的原因是什么?所有 TrueType 符号字体在其内部数据中都有特殊的表“cmap” 。此表将字符代码映射到字形索引。 并且该表可以包含不同的编码子表,其中 描述了使用的编码。请参阅有关 cmap 表的高级信息 at https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6cmap.html. 通常 cmap 表包含多个编码子表,但 PDF/A 标准要求 只有一种编码在 PDF/A 文档中必须为该字体保留子表 (3,0)。 这里的关键问题 - 必须从另一个子表中获取哪些数据才能复制到 目标编码表 (3,0)?大多数字体都有“格式良好”的 cmap 表,其中 每个编码子表都与另一个子表完全一致。但是一些 fonts 的 cmap 表存在冲突 - 例如,一个子表的字形索引 100 对应 unicode 100,但另一个子表的字形索引 200 对应相同的 unicode 100. 解决这个问题需要特殊策略。 默认情况下使用以下策略: mac subtable(1,0) 被查找。如果找到这个表,只有这个数据用来填充destination 表(3,0)。如果未找到 mac 子表,则除 (3,0) 之外的所有子表都将被迭代 并用于将数据复制到目标 (3,0) 子表中。仅当目标表当前没有此 unicode 时,每个 unicode(unicode, glyph index) 的映射也被复制到目标表中。 因此,例如,如果第一个子表具有 unicode 100 的字形索引 100,而下一个子表具有相同 unicode 100 的 glyph 索引 200,则只会复制第一个子表中的数据(unicode=100,字形索引 = 100)。 所以前一个子表优先于下一个。 这个类的属性PdfASymbolicFontEncodingStrategy帮助调整默认行为。 如果属性PreferredCmapEncodingTable类型CMapEncodingTableType 已设置,则相关子表将优先于 mac subtable(1,0) 使用。来自 枚举的值“MacTable”CMapEncodingTableType在这种情况下没有任何意义,因为它 指向默认情况下将使用的同一个 mac 子表 (1,0)。 属性CmapEncodingTablesPriorityQueue丢弃任何子表的所有优先级。 如果设置了此属性,则将仅按指定顺序使用声明队列中的子表。 如果未找到指定的子表,则将使用所有子表的默认迭代和上述 复制策略。 目的QueueItem指定使用的编码子表。此子表可以通过成员组合(PlatformID、PlatformSpecificId)或通过CMapEncodingTableType 枚举。

public class PdfASymbolicFontEncodingStrategy

构造函数

姓名 描述
PdfASymbolicFontEncodingStrategy() 构造函数。设置默认子表 (mac 1,0)
PdfASymbolicFontEncodingStrategy(CMapEncodingTableType) 构造函数
PdfASymbolicFontEncodingStrategy(Queue<QueueItem>) 构造函数

特性

姓名 描述
CmapEncodingTablesPriorityQueue { get; set; } 指定要处理的编码子表队列。
PreferredCmapEncodingTable { get; set; } 指定优先于 mac subtable(1,0) 使用的子表。来自 枚举的值“MacTable”CMapEncodingTableType在这种情况下没有意义。

也可以看看