Hur man arbetar med WOFF-teckensnitt i Python
Denna guide visar hur man laddar, inspekterar och konverterar WOFF- och WOFF2-webbtypsnitt med Aspose.Font FOSS för Python. WOFF (Web Open Font Format) är standarden för att leverera typsnitt på webben. WOFF 1 använder zlib-komprimering och WOFF 2 använder Brotli-komprimering, båda omsluter ett underliggande TrueType eller CFF-typsnitt. Aspose.Font FOSS laddar båda formaten och exponerar de inre typsnittsdata genom en ren API.
Steg-för-steg-guide
Steg 1: Installera paketet
Installera Aspose.Font FOSS-paketet med kommandot nedan:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Steg 2: Importera nödvändiga klasser
Importera FontLoader, FontConverter och FontType för att läsa in och konvertera WOFF-fonter:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeSteg 3: Läs in och inspektera en WOFF-font
Läs in en WOFF-fil med FontLoader.open() och läs grundläggande egenskaper såsom namn, familj och antal glyfer:
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}")Steg 4: Läs WOFF-metadata
WOFF-filer kan innehålla ett XML metadata-block med licensiering, krediter och beskrivning. Kom åt den via egenskapen 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")Steg 5: Åtkomst till inre TTF-tabeller
Både WoffFont och Woff2Font exponerar en inner_font-egenskap som ger dig den underliggande TtfFont. Genom den kan du komma åt alla standard OpenType-tabeller.
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)}")Steg 6: Konvertera TTF till WOFF
Läs in ett TTF-typsnitt och konvertera det till WOFF-format genom att skicka FontType.WOFF till 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)Steg 7: Konvertera TTF till WOFF2
Läs in ett TTF-typsnitt och konvertera det till WOFF2-format genom att skicka FontType.WOFF2 till 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)Steg 8: Konvertera mellan WOFF och WOFF2
Konvertera en inläst WOFF-fil till WOFF2 (eller vice versa) genom att skicka målet FontType till 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)Vanliga problem och lösningar
FontParseException: Invalid WOFF signature — Filen är inte ett giltigt WOFF-typsnitt. Verifiera att filen inte är skadad och att den börjar med WOFF:s magiska byte.
FontParseException: WOFF table decompression failed — En komprimerad tabell i WOFF-filen är skadad. Försök ladda ner typsnittsfilen igen.
Stor WOFF2-utdata — WOFF2 använder Brotli-komprimering som ger mindre filer än WOFF 1 (zlib). Om ditt WOFF2-utdata är oväntat stort, se till att du börjar från en optimerad TTF-källa.
Vanliga frågor
Vad är skillnaden mellan WOFF och WOFF2?
WOFF 1 använder zlib-komprimering och WOFF 2 använder Brotli-komprimering. WOFF2 uppnår vanligtvis 20–30% bättre komprimering än WOFF 1. Båda omsluter samma underliggande TrueType eller CFF-fontdata.
Kan jag komma åt fonttabeller från en WOFF-fil?
Ja. Använd egenskapen inner_font för att få den underliggande TtfFont, och sedan komma åt tabeller via inner_font.ttf_tables.
Stöder biblioteket WOFF-metadata?
Ja. Både WoffFont och Woff2Font exponerar en metadata_xml egenskap som innehåller det valfria XML metadata-blocket.