PdfASymbolicFontEncodingStrategy

PdfASymbolicFontEncodingStrategy class

Cette classe décrit les règles qui peuvent être utilisées pour régler le processus de copie des données d’encodage pour les cas lorsque la police symbolique TrueType a plus d’un encodage. Certains documents PDF après conversion au format PDF/A peuvent avoir l’erreur “Plus d’un encodage dans symbolique Cmap de la police TrueType”. Quelle est la raison de cette erreur ? Toutes les polices symboliques TrueType ont une table spéciale “cmap” dans ses données internes. Ce tableau mappe les codes de caractère aux indices de glyphe. Et cette table pourrait contenir différentes sous-tables d’encodage qui décrivent les encodages utilisés. Voir les informations avancées sur les tables cmap sur https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6cmap.html. Habituellement, la table cmap contient plusieurs sous-tables d’encodage, mais la norme PDF/A exige qu’un seul encodage la sous-table (3,0) doit être laissée pour cette police dans le document PDF/A. Et question clé ici - quelles données doivent être extraites d’une autre sous-table pour copier la table d’encodage de destination into (3,0) ? La majorité des polices ont des tables Cmap « bien formées » où chaque sous-table d’encodage est entièrement cohérente avec une autre sous-table. Mais certaines fonts ont des tables cmap avec des collisions - où, par exemple, une sous-table a l’index de glyphe 100 pour l’unicode 100, mais une autre sous-table a l’index de glyphe 200 pour le même unicode 100. Pour résoudre ce problème, une stratégie spéciale est nécessaire. Par défaut, la stratégie suivante est utilisée : la sous-table mac(1,0) est recherchée. Si cette table est trouvée, seules ces données sont utilisées pour remplir la table destination (3,0). Si la sous-table mac n’est pas trouvée, toutes les sous-tables sauf (3,0) sont itérées et utilisées pour copier les données dans la sous-table de destination (3,0). De plus, le mappage pour chaque unicode (unicode, index de glyphe) est copié dans la table de destination uniquement si la table de destination n’a pas cet unicode au moment actuel. Ainsi, par exemple, si le premier sous-tableau a l’index de glyphe 100 pour l’unicode 100 et que le sous-table suivant a l’index glyph de 200 pour le même unicode 100, seules les données du premier sous-tableau (unicode=100, index de glyphe = 100) seront copiées. Ainsi, chaque sous-table précédente a priorité sur la suivante. Propriétés de cette classePdfASymbolicFontEncodingStrategyaider à régler le comportement par défaut. Si la propriétéPreferredCmapEncodingTable de typeCMapEncodingTableType est défini, la sous-table correspondante sera utilisée en priorité sur mac subtable(1,0). Valeur ‘MacTable’ de l’énumération CMapEncodingTableType n’a aucun sens dans ce cas, car il pointe sur la même sous-table mac (1,0) qui sera utilisée par défaut. PropriétéCmapEncodingTablesPriorityQueue supprime toutes les priorités pour n’importe quelle sous-table. Si cette propriété est définie, seules les sous-tables de la file d’attente déclarée seront utilisées dans l’ordre spécifié. Si les sous-tables spécifiées ne sont pas trouvées, l’itération par défaut de toutes les sous-tables et la stratégie de copie décrites ci-dessus seront utilisées. ObjetQueueItem spécifie la sous-table d’encodage utilisée. Cette sous-table peut être set via une combinaison de membres (PlatformID, PlatformSpecificId) ou viaCMapEncodingTableType énumération.

public class PdfASymbolicFontEncodingStrategy

Constructeurs

NomLa description
PdfASymbolicFontEncodingStrategy()Constructeur. Définit la sous-table par défaut (mac 1,0)
PdfASymbolicFontEncodingStrategy(CMapEncodingTableType)Constructeur
PdfASymbolicFontEncodingStrategy(Queue<QueueItem>)Constructeur

Propriétés

NomLa description
CmapEncodingTablesPriorityQueue { get; set; }Spécifie la file d’attente des sous-tables d’encodage à traiter.
PreferredCmapEncodingTable { get; set; }Spécifie la sous-table qui sera utilisée en priorité sur mac subtable(1,0). Valeur ‘MacTable’ de l’énumération CMapEncodingTableType n’a aucun sens dans ce cas.

Voir également