Hur man arbetar med WOFF-teckensnitt i Python

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 FontType

Steg 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.

Se även

 Svenska