Module optionnel · pdftoolkit/pdf-fonts 0.1.7
English | Français
Deux formats, deux responsabilités
ISO 32000-1 décrit un /FontFile2 comme un flux contenant un programme TrueType,
un descripteur comme un dictionnaire de métriques en unités PDF, et une police
composite comme un graphe d’objets : /Type0, /CIDFontType2, /CIDToGIDMap,
/W et /ToUnicode. Le core peut construire chacun de ces objets à partir de
valeurs déjà connues. Il ne décode pas les tables sfnt d’une fonte externe.
Le format TrueType définit ses tables et les règles nécessaires pour lire les métriques et les contours. Les classes de ce package prennent en charge cette lecture, puis transmettent seulement les valeurs normalisées au core.
Étapes de l’exemple
- L’application fournit les octets au constructeur
FontProgram. Celui-ci valide les offsets, les tailles, les métriques et les droits d’incorporation. CIDFontProgramconserve tous les glyphes et reconstruit le programme destiné à/FontFile2. Il retirecmap, conformément à la section 9.9 pour un/CIDFontType2, ainsi que la signatureDSIGinvalidée par cette conversion. Le répertoire et les checksums sfnt sont recalculés.- Le core reçoit ces octets dans
FontFile2. Il calcule/Length1sans chercher à lire ou valider les tables TrueType ; les filtres PDF encodent le flux. UnicodeTextdéclare le répertoire avant de construire le document.CharacterMapFactorycherche les GID danscmap, attribue des CID distincts aux caractères Unicode et convertit les avances vers les 1 000 unités PDF. Deux caractères partageant un glyphe conservent des CID et des mappings/ToUnicodedistincts.FontDescriptorFactoryconvertit les dimensions, la boîte, l’angle et les hauteurs vers desNumericTypeet unRectangledu core.StemVet les flags sont fournis explicitement, car le format ne fournit pas une mesure universelle de l’épaisseur des fûts.CapHeightpeut être fourni explicitement si la fonte ne le déclare pas et si la hauteur du glypheHne suffit pas.CIDWidths,CIDToGIDMap,ToUnicodeCMap,CIDFontType2etType0Fontcomposent ensuite exclusivement des objets PDF. Ils ne connaissent niFontProgram, nicmap, ni le nombre d’unités par em.TextEncoderconvertit les caractères déjà déclarés en codes de deux octets. Un caractère absent du répertoire provoque une exception ; l’encodeur ne modifie pas la police à l’insu de l’application.
Les deux fabriques vérifient que les octets du FontFile2 fourni correspondent
au CIDFontProgram utilisé. Les objets du core vérifient ensuite l’identité du
flux incorporé, le nom de police et le partage du même répertoire.
Limites
L’exemple compose du français et du grec sans composition contextuelle. Il ne prétend pas traiter automatiquement l’arabe, les scripts nécessitant du shaping, les ligatures, le crénage, les variations ou les écritures verticales.
La police de démonstration Noto Sans est redistribuée sous sa licence OFL dans
examples/assets/fonts/OFL.txt. Les fichiers sont lus par l’application ; les
classes du package ne disposent d’aucun accès implicite au système de fichiers.