Wprowadzenie

Czcionki TrueType (.ttf) i ich nadzbiór OpenType (.otf) są dominującymi formatami czcionek w nowoczesnych systemach operacyjnych. Oba formaty dzielą tę samą binarną strukturę tabel opartą na specyfikacji OpenType. Aspose.Font FOSS dla Python udostępnia tę strukturę poprzez TtfFont, zapewniając bezpośredni dostęp do poszczególnych tabel OpenType, danych par kerningowych, osi czcionek zmiennych oraz konturów glifów.

Klasa TtfFont rozszerza klasę bazową Font o metody specyficzne dla TTF, w tym get_blob, get_table_bytes, set_table_bytes oraz instantiate służące do blokowania osi czcionek zmiennych. Właściwość TtfTableSet (ttf_tables) zapewnia typowany dostęp do najczęściej używanych tabel OpenType: head, hhea, maxp, os2, name, post.

Biblioteka jest publikowana na PyPI jako aspose-font i udostępniona na licencji MIT. Nie posiada obowiązkowych zależności komercyjnych.


Kluczowe funkcje

Ładowanie czcionek TTF i OTF

Użyj FontLoader.open, aby załadować dowolny plik czcionki TrueType lub OpenType:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)

FontLoader.open wykrywa format czcionki z nagłówka pliku. Zarówno .ttf (TrueType), jak i .otf (OpenType CFF) są obsługiwane i oba zwracają instancję TtfFont.


Uzyskiwanie dostępu do tabel OpenType za pośrednictwem TtfTableSet

Właściwość ttf_tables zwraca TtfTableSet z typowanymi dostępami do typowych tabel OpenType. Każda właściwość zwraca obiekt tabeli lub None, jeśli nie istnieje:

Właściwość ttf_tables w TtfFont zwraca instancję TtfTableSet. Dostępne akcesory tabel:

  • head — HeadTable | None
  • hhea — HheaTable | None
  • maxp — MaxpTable | None
  • os2 — Os2Table | None
  • name — NameTable | None
  • post — PostTable | None

Każda właściwość zwraca obiekt tabeli lub None, jeśli ta tabela nie jest obecna w pliku czcionki. Uzyskaj dostęp do właściwości TtfTableSet, aby sprawdzić konkretne tabele przed ich odczytem. Dla tabel nieobsługiwanych przez nazwane akcesory, użyj TtfTableSet.get_raw(tag), aby pobrać surowe bajty za pomocą czteroznakowego znacznika OpenType.


Odczytywanie surowych bajtów tabeli

get_table_bytes(tag) zwraca surowe bajty dowolnej tabeli OpenType. Użyj get_blob(tag) dla wariantu bezpiecznego względem None, który zwraca None, gdy tabela jest nieobecna:

TtfFont udostępnia dwie metody dostępu do surowej tabeli:

  • get_table_bytes(tag) -> bytes — zwraca surowe bajty nazwanej tabeli (rzuca wyjątek, jeśli nieobecna)
  • get_blob(tag) -> bytes | None — zwraca None, jeśli tabela jest nieobecna (wariant bezpieczny)

Obie metody akceptują czteroznakowy znacznik tabeli OpenType, taki jak "cmap", "GDEF" lub "GPOS". Użyj get_blob, gdy tabela jest opcjonalna, aby móc sprawdzić None przed przetwarzaniem.


Pary kerningu

get_kern_pairs() zwraca wszystkie pary kerningu zakodowane w czcionce. Każdy KernPair posiada left (GlyphId), right (GlyphId) oraz value (int w jednostkach czcionki):

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")

for pair in pairs[:5]:
    print(f"  Left: {pair.left}  Right: {pair.right}  Value: {pair.value}")

Metryki czcionki

Standardowe metryki są dostępne poprzez właściwość metrics:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

metrics = loaded.metrics
print(f"Units per em  : {metrics.units_per_em}")
print(f"Ascender      : {metrics.ascender}")
print(f"Descender     : {metrics.descender}")
print(f"Line gap      : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")

Obsługa czcionek zmiennych

Dla czcionek zmiennych, TtfFont udostępnia is_variable, variable_axes i named_instances. Użyj get_axis(tag), aby pobrać konkretną oś według jej czteroznakowego znacznika:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/RobotoFlex.ttf")

print(f"Is variable: {loaded.is_variable}")
print(f"Axes       : {len(loaded.variable_axes)}")

Metoda get_axis(tag) w TtfFont pobiera VariableAxis według jego czteroznakowego znacznika (np. "wght" dla wagi, "wdth" dla szerokości). Zwraca None, jeśli oś nie jest obecna w tabeli fvar czcionki.


Konwertowanie czcionek

to_bytes(font_type) konwertuje czcionkę na inny format. Użyj wyliczenia FontType, aby określić docelowy:

from aspose_font import FontLoader, FontType

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
    fh.write(ttf_bytes)

print(f"Serialized: {len(ttf_bytes)} bytes")

Szybki start

Zainstaluj bibliotekę:

.venv/bin/pip install aspose-font

Wczytaj czcionkę TTF i sprawdź ją:

from aspose_font import FontLoader, FontType

loaded = FontLoader.open("Roboto-Regular.ttf")

print(f"Font name : {loaded.font_name}")
print(f"Family    : {loaded.font_family}")
print(f"Glyphs    : {loaded.num_glyphs}")
print(f"Variable  : {loaded.is_variable}")

metrics = loaded.metrics
print(f"UPM       : {metrics.units_per_em}")

ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")

Obsługiwane formaty

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

Wszystkie formaty są ładowane przez FontLoader.open. Czcionki TTF/OTF zwracają instancję TtfFont.


Open Source & Licencjonowanie

Aspose.Font FOSS dla Python jest wydany na licencji MIT. Możesz go używać w projektach prywatnych, komercyjnych i open-source bez żadnych kosztów. Kod źródłowy jest dostępny na GitHub, a pakiet jest dystrybuowany przez PyPI jako aspose-font.


Rozpoczęcie

Powiązane zasoby