Introducere

Fișierele de font sunt structurate în jurul tabelurilor fiecare tablă stochează o categorie specifică de date, cum ar fi contoarele glifului, cartografierea caracterelor, metadatele cu denumire sau metricile orizontale. Înțelegerea și accesarea acestor tabele este esențială pentru sarcini precum analiza tipurilor de scris, editarea metadatelor , asigurarea calității și conversia formatului .

Aspose.Font FOSS for Python (aspose-font) vă oferă acces direct la setul complet de tabele OpenType și TrueTybe printr-un API Python curat. Biblioteca este eliberată sub licența MIT cu zero dependențe externe, astfel încât să puteți integra în orice proiect fără probleme legate de licență.

Acest post merge prin clasele de tabele cheie disponibile în bibliotecă de la citirea metadatele capului pentru a inspecta datele glif și modificarea inregistrărilor nume ?? toate susținute de către TtfTableSet containerul pe TtfFont.


Caracteristici cheie

Încărcarea fontului și accesul la tabele

Fiecare font încărcat cu FontLoader expune tabele sale analizat prin intermediul ttf_tables proprietate pe TtfFont.- Ce ? TtfTableSet Obiectul oferă acces tip pentru fiecare tabel standard, plus acces de byte brut prin intermediul get_raw() pentru mese personalizate sau necunoscute.

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

Citirea Tabelei de la Capăt

În ceea ce priveşte HeadTable stochează parametrii fundamentali pentru font: unități pe em, revizuire, casetă de limitare, data creării și steaguri de stil. Aceste valori sunt critice pentru motoarele de rendering și validatorii de tipuri.

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

Lucrarea cu tabelul de nume

În ceea ce priveşte NameTable Conține toate metadatele care pot fi citite de om: numele familiei fontului, stilul, drepturile de autor, licența, designer și descrierea. Puteți consulta înregistrările prin ID-uri de nume, puteți recupera denumiri localizate sau modifica intrări pentru 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")

Inspecția tabelului CMap

În ceea ce priveşte CmapTable mapă codele Unicode la ID-urile de glifoane. Poate conține mai multe subtabele pentru diferite platforme și combinații de codificare. Utilizați best_subtable() pentru a obține cea mai potrivită cartografiere pentru cazul dvs. de utilizare.

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

Citirea OS/2 și a metricelor orizontale

În ceea ce priveşte Os2Table oferă metrici specifice OS/2 și Windows, inclusiv ascender/descender tipografic, embeding flags și clasificare Panose. HheaTable și de: HmtxTable furnizează metrice de layout orizontale utilizate pentru modelarea textului.

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

Datele de cercetare și glyph

În ceea ce priveşte KernTable Stocarea perechilor de core pentru ajustări orizontale. GlyfTable conține datele reale de profil pentru fonturile TrueType. Puteți utiliza, de asemenea, PostTable să rezolvăm numele de glife.

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

Început rapid

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

Formatele suportate

FormatulExtindereCiteşte.Scrie .
TTF.ttf
OTF.de la
CFF.cff
WOFF.- Ce ?
WOFF2.woff2 (în limba engleză)
EOT.Nu.
TYPE1.pfb/.pfa

Open Source & Licențiere

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. Sunteți liberi să o utilizați, modificați și distribuiți în proiecte personale sau comerciale fără restricții.


Cum să începem?

Resurse conexe