Introduction

Les fichiers de caractères sont structurés autour des tables - chaque table stockera une catégorie spécifique de données telles que les outlines glyphes, cartographies de personnages, méta-data d’appel ou métriques horizontales. Comprendre et accéder à ces tabules est essentiel pour des tâches comme l’analyse des fonctions, l’édition des metadata, la garantie de la qualité et la conversion du format.

Aspose.Font FOSS for Python (aspose-font) vous donne accès direct au ensemble complet des tables OpenType et TrueTYpe via une API Python propre.La bibliothèque est publiée sous la licence MIT avec zéro dépendances extérieures, de sorte que vous pouvez l’intégrer dans n’importe quel projet sans aucun problème de licence.

Ce post passe par les classes de table clés disponibles dans la bibliothèque – des métadonnées de lecture des titres à l’inspection des données glyphes et modifiant les enregistrements d’appels – toutes soutenues par le site web. TtfTableSet Contenu sur TtfFont.


Fonctionnalités clés

Charger un fichier et accéder aux tables

Chaque feuille chargée avec FontLoader Il expose ses tables partagées à travers le ttf_tables Propriété sur TtfFont.Le TtfTableSet l’objet fournit un accès typique à chaque table standard, plus des bits crus d’accès par le biais de get_raw() pour des tables personnalisées ou non reconnues.

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
tables = font.ttf_tables

# Typed table access
head = tables.head
name = tables.name
cmap = tables.cmap

# Raw bytes for any table tag
raw_os2 = tables.get_raw("OS/2")

Lire la table de tête

Le HeadTable stockent des paramètres fonciers fondamentaux : unités par em, révision, boîte de limite, date de création et drapeaux de style. Ces valeurs sont essentielles pour la rendu des moteurs et les validateurs de font.

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
head = font.ttf_tables.head

print(f"Units per em: {head.units_per_em}")
print(f"Revision: {head.font_revision}")
print(f"Bounding box: ({head.x_min}, {head.y_min}) to ({head.x_max}, {head.y_max})")
print(f"Mac style flags: {head.mac_style}")
print(f"Glyph data format: {head.glyph_data_format}")

Travailler avec la table de nom

Le NameTable Il contient tous les métadonnées humaines : nom de famille, style, copyright, licence, concepteur et description. Vous pouvez demander des enregistrements par ID de nom, obtenir des noms localisés ou modifier les entrées pour rebranding.

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
name_table = font.ttf_tables.name

# Read the font family name (name ID 1)
family = name_table.best_name(1, ["en"])
print(f"Family: {family}")

# List all localized versions of the full name (name ID 4)
localized = name_table.localized_names(4)
for lang, value in localized.items():
    print(f"  {lang}: {value}")

# Replace the font family name
name_table.replace_name(1, "MyCustomFamily")

Vérification de la table CMAP

Le CmapTable cartes Unicode codepoints à glyph ID. Il peut contenir plusieurs sous-tables pour différentes plateformes et des combinaisons de codage. best_subtable() Pour obtenir le cartographie la plus appropriée pour votre cas d’utilisation.

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
cmap = font.ttf_tables.cmap

# Get the best Unicode subtable
subtable = cmap.best_subtable()
print(f"Platform: {subtable.platform_id}, Encoding: {subtable.encoding_id}")

# Look up the glyph ID for 'A'
gid = subtable.get_gid(ord("A"))
print(f"Glyph ID for 'A': {gid}")

Les données OS/2 et Métries horizontales

Le Os2Table fournit des métrics spécifiques à OS/2 et Windows, y compris l’ascendance/descendante typographique, les drapeaux de mise en place et la classification Panose. HheaTable et HmtxTable fournir des métrics de layout horizontal utilisés pour la formation du texte.

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")
os2 = font.ttf_tables.os2
hhea = font.ttf_tables.hhea

print(f"Typo ascender: {os2.s_typo_ascender}")
print(f"Typo descender: {os2.s_typo_descender}")
print(f"Embedding flags (fsType): {os2.fs_type}")
print(f"Panose: {os2.panose.hex()}")

print(f"Hhea ascender: {hhea.ascender}")
print(f"Max advance width: {hhea.advance_width_max}")
print(f"Number of hmetrics: {hhea.number_of_hmetrics}")

Kerning et Glyph Data

Le KernTable les échanges de paires pour des ajustements horizontaux d’espace. GlyfTable contient les données d’outline du glyph réel pour les phontres TrueType. vous pouvez également utiliser PostTable Pour résoudre les noms de glyphes.

import aspose_font

font = aspose_font.FontLoader.open("MyFont.ttf")

# Kerning lookup
kern = font.ttf_tables.kern
if kern:
    pairs = kern.pairs
    print(f"Total kern pairs: {len(pairs)}")
    # Look up a specific pair by glyph IDs
    adjustment = kern.get(36, 57)
    print(f"Kern adjustment: {adjustment}")

# Glyph name from post table
post = font.ttf_tables.post
if post:
    glyph_name = post.glyph_name(0)
    print(f"Glyph 0 name: {glyph_name}")

Démarrage rapide

pip install aspose-font>=1.0.0
import aspose_font

# Load any TTF or OTF font
font = aspose_font.FontLoader.open("MyFont.ttf")
tables = font.ttf_tables

# Print basic table info
print(f"Font: {font.font_name}")
print(f"Family: {font.font_family}")
print(f"Glyphs: {font.num_glyphs}")
print(f"Units/em: {tables.head.units_per_em}")

# Read name table entries
name_table = tables.name
for name_id in [0, 1, 2, 4, 5, 6]:
    value = name_table.best_name(name_id, ["en"])
    if value:
        print(f"  Name ID {name_id}: {value}")

# Check character coverage
cmap = tables.cmap
subtable = cmap.best_subtable()
for char in "ABCabc012":
    gid = subtable.get_gid(ord(char))
    print(f"  '{char}' -> glyph {gid}")

Formats soutenus

FormatsExtensionLireÉcrire
TTF.TFD
OTF.OTP
CFF.CFF
WOFF.Voff
WOFF2.Le Wooff2
EOT.EOT
TYPE1.pfb / pfa

Source ouverte et licence

Aspose.Font FOSS for Python is released under the MIT license. The source code is available on GitHub and the package is published on PyPI as aspose-font.Vous êtes libre d’utiliser, de modifier et de le distribuer dans des projets personnels et commerciaux sans restriction.


Pour commencer

Ressources associées