Introduktion
Fontfiler är strukturerade kring tabeller — varje tabell lagrar en specifik kategori av data såsom glyfkonturer, teckenkodningar, namnmetadata eller horisontella mått. Att förstå och komma åt dessa tabeller är avgörande för uppgifter som fontanalys, redigering av metadata, kvalitetssäkring och formatkonvertering.
Aspose.Font FOSS för Python (aspose-font) ger dig direkt åtkomst till hela uppsättningen av OpenType och TrueType tabeller via ett rent Python API. Biblioteket är släppt under MIT-licensen utan externa beroenden, så du kan integrera det i vilket projekt som helst utan licensproblem.
Detta inlägg går igenom de viktigaste tabellklasserna som finns i biblioteket — från att läsa huvudmetadata till att inspektera glyfdata och modifiera namnposter — allt stöds av TtfTableSet-behållaren på TtfFont.
Nyckelfunktioner
Laddar en font och får åtkomst till tabeller
Varje font som laddas med FontLoader exponerar sina analyserade tabeller via ttf_tables-egenskapen på TtfFont. TtfTableSet-objektet ger typad åtkomst till varje standardtabell, samt råbyte-åtkomst via get_raw() för anpassade eller oidentifierade tabeller.
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")
Läsa Head-tabellen
The HeadTable lagrar grundläggande teckensnittsomfattande parametrar: enheter per em, revision, omgivningsruta, skapelsedatum och stilflaggor. Dessa värden är kritiska för renderingsmotorer och teckensnittsvaliderare.
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}")
Arbeta med Name-tabellen
The NameTable innehåller all mänskligt läsbar metadata: teckensnittsfamiljnamn, stil, upphovsrätt, licens, designer och beskrivning. Du kan fråga poster efter namn-ID, hämta lokala namn eller ändra poster för omprofilering.
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")
Inspektera CMap-tabellen
The CmapTable mappar Unicode-kodpunkter till glyfid. Den kan innehålla flera subtabeller för olika plattforms- och kodningskombinationer. Använd best_subtable() för att få den mest lämpliga mappningen för ditt användningsfall.
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}")
Läsa OS/2 och horisontella metriker
The Os2Table tillhandahåller OS/2 och Windows-specifika metriker inklusive typografisk ascender/descender, inbäddningsflaggor och Panose-klassificering. HheaTable och HmtxTable levererar horisontella layoutmetriker som används för textformning.
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 och glyfdata
Den KernTable lagrar kerningpar för horisontella avståndsjusteringar. Den GlyfTable innehåller den faktiska glyfkonturdata för TrueType-typsnitt. Du kan också använda PostTable för att slå upp glyfnamn.
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}")
Snabbstart
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}")
Stödda format
| Format | Filändelse | Läs | Skriv |
|---|---|---|---|
| TTF | .ttf | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| CFF | .cff | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
Öppen källkod & licensiering
Aspose.Font FOSS för Python släpps under MIT-licensen. Källkoden finns tillgänglig på GitHub och paketet publiceras på PyPI som aspose-font. Du får fritt använda, modifiera och distribuera det i både personliga och kommersiella projekt utan restriktioner.