Podstawowe zarządzanie czcionkami
Podstawowe zarządzanie czcionkami
Ten przewodnik pokazuje, jak ładować czcionki z ścieżek plików lub tablic bajtów, odczytywać właściwości metadanych, mapować punkty kodowe Unicode na identyfikatory glifów, pobierać glify oraz pracować z osiami zmiennych czcionek i nazwanymi instancjami.
FontLoader jest podstawowym punktem wejścia dla wszystkich operacji ładowania czcionek. Po załadowaniu czcionki, klasa bazowa Font zapewnia dostęp do metadanych, kodowania, dostępu do glifów i metryk bez konieczności parsowania binarnych tabel.
Ładowanie czcionek
FontLoader.open(source, font_type, collection_index) ładuje czcionkę ze ścieżki pliku z automatycznym wykrywaniem formatu. FontLoader.load(source, font_type, collection_index) akceptuje surowe bajty dla przepływów pracy w pamięci lub sieciowych.
from aspose_font import FontLoader
# From a file path — format auto-detected
font = FontLoader.open("Roboto-Regular.ttf")
# From raw bytes — useful for in-memory or network workflows
with open("OpenSans-Regular.otf", "rb") as f:
font = FontLoader.load(f.read())Odczytywanie metadanych czcionki
Po załadowaniu obiekt Font udostępnia właściwości font_name, font_family, font_style i num_glyphs do szybkiej inspekcji bez ręcznego parsowania tabel.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.ttf")
print(font.font_name) # full PostScript name
print(font.font_family) # family name
print(font.font_style) # style name e.g. "Regular", "Bold"
print(font.num_glyphs) # total glyph countKodowanie glifów
FontEncoding mapuje punkty kodowe Unicode na identyfikatory glifów. Użyj unicode_to_gid(cp), aby rozwiązać pojedynczy punkt kodowy, lub get_all_codepoints(), aby wyliczyć wszystkie mapowane punkty kodowe w czcionce.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
# Map a single code point
gid = font.encoding.unicode_to_gid(0x41) # GID for 'A'
# Enumerate all mapped code points
all_cps = font.encoding.get_all_codepoints()
print(f"Font covers {len(all_cps)} Unicode code points")Dostęp do glifów
GlyphAccessor pobiera obiekty glifów według ID, Unicode lub ciągu tekstowego.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
glyph = font.glyph_accessor.get_glyph_by_id(gid)
glyph_a = font.glyph_accessor.get_glyph_by_unicode(0x41)
glyphs = font.glyph_accessor.get_glyphs_for_text("Hello")
all_ids = font.glyph_accessor.get_all_glyph_ids()Czcionki zmienne
Dla czcionek zmiennych (tych zawierających tabelę fvar), TtfFont udostępnia definicje osi i nazwane instancje bezpośrednio.
from aspose_font import FontLoader
from aspose_font import TtfFont
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
ttf: TtfFont = loaded.font
# Check if the font is variable
if ttf.is_variable:
# List all variation axes
for axis in ttf.variable_axes:
print(f"{axis.tag} range: {axis.min_value}..{axis.max_value} default: {axis.default_value}")
# Look up a single axis by tag
wght = ttf.get_axis("wght")
if wght:
print(f"Weight axis: {wght.min_value}..{wght.max_value}")
# Enumerate named instances (e.g. Bold, Condensed)
for inst in ttf.named_instances:
print(f"Instance: name_id={inst.name_id} coordinates={inst.coordinates}")W przypadku bardziej zaawansowanych przepływów pracy związanych z instancjonowaniem, SmartInstancer otacza wyliczanie osi i rozwiązywanie nazwanych instancji w jednym obiekcie:
from aspose_font import FontLoader
from aspose_font import SmartInstancer
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
instancer = SmartInstancer(loaded.font)
print(f"Axes: {[a.tag for a in instancer.axes]}")
print(f"Named instances: {len(instancer.named_instances)}")Wskazówki i najlepsze praktyki
- Buforuj załadowane
Fontobiekty podczas przetwarzania tego samego pliku czcionki wielokrotnie - Użyj
FontLoader.load(bytes)w przepływach sieciowych lub bazodanowych, aby uniknąć plików tymczasowych - Sprawdź
num_glyphsprzed podzbiorem, aby oszacować pokrycie po podzbiorze get_all_glyph_ids()jest przydatny do iteracji pełnego zestawu glifów
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
UnsupportedFontFormatException | Nie rozpoznano formatu pliku | Sprawdź, czy plik jest prawidłowym TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1 |
FontParseException | Uszkodzone dane binarne | Zweryfikuj plik czcionki za pomocą lintera przed jego załadowaniem |
GlyphNotFoundException | GID poza zakresem | Sprawdź num_glyphs przed dostępem po ID |
FAQ
Czy FontLoader obsługuje WOFF2?
Tak. FontLoader.open() i FontLoader.load() oba akceptują pliki WOFF2 i automatycznie wykrywają format.
Czy mogę załadować czcionkę z adresu URL?
Nie bezpośrednio. Pobierz bajty czcionki przy użyciu urllib lub requests i przekaż je do FontLoader.load(bytes).
Czy ładowanie jest bezpieczne wątkowo?
Każde wywołanie FontLoader.open() zwraca niezależny obiekt Font. Jednoczesne wywołania na oddzielnych obiektach są bezpieczne.
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
FontLoader.open(path) | Załaduj czcionkę ze ścieżki pliku |
FontLoader.load(data) | Wczytaj czcionkę z surowych bajtów |
Font.font_name | Pełna nazwa czcionki PostScript |
Font.font_family | Nazwa rodziny czcionki |
Font.font_style | Nazwa stylu czcionki |
Font.num_glyphs | Łączna liczba glifów |
FontEncoding.unicode_to_gid(cp) | Mapuj punkt kodowy Unicode na identyfikator glifu |
FontEncoding.get_all_codepoints() | Wszystkie punkty kodowe Unicode z mapowaniami glifów |
GlyphAccessor.get_glyph_by_id(gid) | Pobierz glif po identyfikatorze |
GlyphAccessor.get_glyph_by_unicode(cp) | Pobierz glif po punkcie kodowym Unicode |
GlyphAccessor.get_glyphs_for_text(text) | Pobierz glify dla ciągu znaków |
GlyphAccessor.get_all_glyph_ids() | Lista wszystkich identyfikatorów glifów w czcionce |
TtfFont.is_variable | Czy czcionka zawiera zmienne dane czcionki |
TtfFont.variable_axes | Lista obiektów VariableAxis dla każdej osi wariacji |
TtfFont.get_axis(tag) | Wyszukaj pojedynczą oś po jej czteroznakowym tagu |
TtfFont.named_instances | Nazwane instancje zdefiniowane w tabeli fvar czcionki |
SmartInstancer(font) | Pomocnik wysokiego poziomu opakowujący zapytania o osie i instancje |