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

FormatFiländelseLäsSkriv
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.


Komma igång

Relaterade resurser