Jak pracować z czcionkami WOFF w Python
Ten przewodnik pokazuje, jak ładować, przeglądać i konwertować czcionki internetowe WOFF i WOFF2 przy użyciu Aspose.Font FOSS dla Python. WOFF (Web Open Font Format) jest standardem dostarczania czcionek w sieci. WOFF 1 używa kompresji zlib, a WOFF 2 używa kompresji Brotli, oba opakowują podstawową czcionkę TrueType lub CFF. Aspose.Font FOSS ładuje oba formaty i udostępnia wewnętrzne dane czcionki poprzez czysty API.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Zainstaluj pakiet Aspose.Font FOSS używając poniższego polecenia:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Krok 2: Zaimportuj wymagane klasy
Importuj FontLoader, FontConverter i FontType, aby wczytać i konwertować czcionki WOFF:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeKrok 3: Wczytaj i zbadaj czcionkę WOFF
Wczytaj plik WOFF za pomocą FontLoader.open() i odczytaj podstawowe właściwości, takie jak nazwa, rodzina i liczba glifów:
from aspose_font import FontLoader
woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")Krok 4: Odczytaj metadane WOFF
Pliki WOFF mogą zawierać blok metadanych XML z informacjami o licencjonowaniu, podziękowaniach i opisie. Uzyskaj do niego dostęp za pośrednictwem właściwości metadata_xml.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF fonts may include an XML metadata block
xml = getattr(font, "metadata_xml", None)
if xml:
print(xml)
else:
print("No metadata in this WOFF file")Krok 5: Uzyskaj dostęp do wewnętrznych tabel TTF
Zarówno WoffFont, jak i Woff2Font udostępniają właściwość inner_font, która daje dostęp do podstawowego TtfFont. Dzięki niej możesz uzyskać dostęp do wszystkich standardowych tabel OpenType.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")Krok 6: Konwertuj TTF na WOFF
Załaduj czcionkę TTF i przekonwertuj ją na format WOFF, przekazując FontType.WOFF do FontConverter.convert():
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff_font = FontConverter.convert(ttf_font, FontType.WOFF)
woff_bytes = woff_font.to_bytes()
from pathlib import Path
Path("MyFont.woff").write_bytes(woff_bytes)Krok 7: Konwertuj TTF na WOFF2
Załaduj czcionkę TTF i przekonwertuj ją na format WOFF2, przekazując FontType.WOFF2 do FontConverter.convert():
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()
from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)Krok 8: Konwertuj pomiędzy WOFF a WOFF2
Przekonwertuj załadowany plik WOFF na WOFF2 (lub odwrotnie), przekazując docelowy FontType do FontConverter.convert():
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
# WOFF -> WOFF2
woff_font = FontLoader.open("MyFont.woff")
woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)
# WOFF2 -> WOFF
woff2_font = FontLoader.open("MyFont.woff2")
woff_font = FontConverter.convert(woff2_font, FontType.WOFF)Typowe problemy i rozwiązania
FontParseException: Invalid WOFF signature — Plik nie jest prawidłową czcionką WOFF. Sprawdź, czy plik nie jest uszkodzony i zaczyna się od bajtów magicznych WOFF.
FontParseException: WOFF table decompression failed — Skompresowana tabela wewnątrz pliku WOFF jest uszkodzona. Spróbuj ponownie pobrać plik czcionki.
Duży rozmiar wyjścia WOFF2 — WOFF2 używa kompresji Brotli, która generuje mniejsze pliki niż WOFF 1 (zlib). Jeśli wyjście WOFF2 jest nieoczekiwanie duże, upewnij się, że zaczynasz od zoptymalizowanego źródła TTF.
Najczęściej zadawane pytania
Jaka jest różnica między WOFF a WOFF2?
WOFF 1 używa kompresji zlib, a WOFF 2 używa kompresji Brotli. WOFF2 zazwyczaj osiąga o 20-30% lepszą kompresję niż WOFF 1. Oba opakowują te same podstawowe dane czcionki TrueType lub CFF.
Czy mogę uzyskać dostęp do tabel czcionki z pliku WOFF?
Tak. Użyj właściwości inner_font, aby uzyskać podstawowy TtfFont, a następnie uzyskaj dostęp do tabel poprzez inner_font.ttf_tables.
Czy biblioteka obsługuje metadane WOFF?
Tak. Zarówno WoffFont, jak i Woff2Font udostępniają właściwość metadata_xml, zawierającą opcjonalny blok metadanych XML.