Introductie

Lettertypebestanden zijn opgebouwd rond tabellen — elke tabel slaat een specifieke categorie gegevens op, zoals glyfcontouren, tekenmappingen, naammetadata of horizontale metriek. Het begrijpen en benaderen van deze tabellen is essentieel voor taken zoals lettertype-analyse, metadata-bewerking, kwaliteitsborging en formaatconversie.

Aspose.Font FOSS voor Python (aspose-font) geeft je directe toegang tot de volledige set van OpenType en TrueType tabellen via een nette Python API. De bibliotheek wordt uitgebracht onder de MIT-licentie zonder externe afhankelijkheden, zodat je het in elk project kunt integreren zonder licentiezorgen.

Deze post loopt de belangrijkste tabelklassen door die beschikbaar zijn in de bibliotheek — van het lezen van header-metadata tot het inspecteren van glyfgegevens en het aanpassen van naamrecords — allemaal ondersteund door de TtfTableSet container op TtfFont.


Belangrijkste kenmerken

Een lettertype laden en tabellen benaderen

Elk lettertype dat wordt geladen met FontLoader maakt zijn geparseerde tabellen beschikbaar via de ttf_tables eigenschap op TtfFont. Het TtfTableSet object biedt getypeerde toegang tot elke standaardtabel, plus toegang tot ruwe bytes via get_raw() voor aangepaste of niet-herkende tabellen.

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")

Lezen van de Head Table

De HeadTable slaat fundamentele font-brede parameters op: units per em, revisie, bounding box, creatiedatum en style flags. Deze waarden zijn cruciaal voor renderengines en font-validators.

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}")

Werken met de Name Table

De NameTable bevat alle menselijk leesbare metadata: fontfamilienaam, stijl, copyright, licentie, ontwerper en beschrijving. Je kunt records opvragen via name ID, gelokaliseerde namen ophalen, of entries wijzigen voor 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")

Inspecteren van de CMap Table

De CmapTable mappt Unicode-codepunten naar glyph-ID’s. Het kan meerdere subtabelen bevatten voor verschillende platform- en coderingcombinaties. Gebruik best_subtable() om de meest geschikte mapping voor jouw geval te krijgen.

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}")

Lezen van OS/2 en horizontale metriek

De Os2Table biedt OS/2 en Windows-specifieke metriek, inclusief typografische ascender/descender, embedding-flags en Panose-classificatie. De HheaTable en HmtxTable leveren horizontale layout-metriek die wordt gebruikt voor tekstvormgeving.

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 en Glyph-gegevens

De KernTable slaat kerningparen op voor horizontale spatie-aanpassingen. De GlyfTable bevat de daadwerkelijke glyph-contourgegevens voor TrueType fonts. Je kunt ook PostTable gebruiken om glyph-namen op te lossen.

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}")

Snelstart

git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .
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}")

Ondersteunde formaten

FormaatExtensieLezenSchrijven
TTF.ttf
OTF.otf
CFF.cff
WOFF.woff
WOFF2.woff2
EOT.eot
TYPE1.pfb/.pfa

Open source & licenties

Aspose.Font FOSS voor Python wordt uitgebracht onder de MIT-licentie. De broncode is beschikbaar op GitHub en het pakket wordt gepubliceerd op PyPI als aspose-font. Je bent vrij om het te gebruiken, aan te passen en te distribueren in zowel persoonlijke als commerciële projecten zonder beperking.


Aan de slag

Gerelateerde bronnen