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
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| 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.