Introducción

WOFF (Web Open Font Format) es el contenedor estándar para la entrega de las letras en la web. Woff 1 ropa una letra TrueType o CFF con compresión zlib; WIFF 2 aplica la composición Brotli en lugar, normalmente alcanzando un 20-30% mejor los ratio de comisión. ambos formatos son apoyados por cada navegador moderno y son el formato de entrega recomendado para tipografía web .

Aspose.Font FOSS for Python exposes WOFF and WOFF2 through the WoffFont y Woff2Font Las dos clases comparten la misma API: exponen propiedades de fonts (font_name, font_family, num_glyphsUna opción opcional metadata_xml El bloque, un inner_font El acervo que devuelve el subyacente TtfFont,Y a to_bytes() El método de conversión.

La biblioteca se publica en Pypi como aspose-font Licenciado bajo el MIT Licencia sin dependencias comerciales obligatorias.


Características clave

Cargar WOFF y Woff2 Fonts

Uso FontLoader.open para cargar un archivo WOFF o Woff2. el cargador detecta el formato de los bajetas mágicos del archivo automáticamente:

from aspose_font.loader import FontLoader

# Load WOFF 1
woff = FontLoader.open("MyFont.woff")
print(f"Name   : {woff.font_name}")
print(f"Family : {woff.font_family}")
print(f"Style  : {woff.font_style}")
print(f"Glyphs : {woff.num_glyphs}")
print(f"Type   : {woff.font_type}")

# Load WOFF 2
woff2 = FontLoader.open("MyFont.woff2")
print(f"Name   : {woff2.font_name}")
print(f"Glyphs : {woff2.num_glyphs}")

FontLoader.open Volver a WoffFont Para .woff Los archivos y a Woff2Font Para .woff2 Los dos cursos realizan la misma Font La interfaz de base, así que el código que Las propiedades de la lectura son idénticas para ambos formatos.


Control de los metadatos WOFF

Los archivos WOFF pueden incluir un bloque de metadatos XML opcional que contiene licencia. información, créditos y una descripción de la font. Acceso a ella a través del metadata_xml Propiedad de la propiedad:

from aspose_font.loader import FontLoader

font = FontLoader.open("MyFont.woff")
# metadata_xml is a WoffFont-specific property
xml = getattr(font, "metadata_xml", None)
if xml:
    print("WOFF metadata XML:")
    print(xml[:500])
else:
    print("No metadata block in this WOFF file")

El metadata_xml La propiedad devuelve a str que contiene el XML crudo, o None Si se La letra no incluye un bloque de metadatos. ambos WoffFont y Woff2Font Exponer Esta propiedad.


Acceso a las tablas TTF interiores

WOFF y WofF2 incorporan una letra TrueType. inner_font La propiedad te da la Subyacimiento TtfFont con acceso completo a su conjunto de tablas OpenType:

from aspose_font.loader import FontLoader

font = FontLoader.open("MyFont.woff")
# inner_font is a WoffFont-specific property returning the TtfFont
inner = getattr(font, "inner_font")
tables = inner.ttf_tables        # TtfTableSet

print(f"Units/em    : {tables.head.units_per_em}")
print(f"Ascender    : {tables.hhea.ascender}")
print(f"Num glyphs  : {tables.maxp.num_glyphs}")
print(f"Family name : {tables.name.best_name(1)}")

A través de inner_font.ttf_tables Puedes acceder a todas las tablas de OpenType estándar: head, hhea, maxp, os2, name,y, post.Para tablas sin un nombre Accesor, uso inner_font.get_blob(tag) para recuperar los bajos crudos con la etiqueta OpenType.


Cuerpos de núcleo desde una font WOFF

get_kern_pairs() devolver todos los pares de núcleos incorporados en la letra. cada uno KernPair Carriera left (El de Glyphid), right (Glyphid) y value (En las unidades de font):

from aspose_font.loader import FontLoader

font = FontLoader.open("MyFont.woff")
pairs = font.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")

for pair in pairs[:5]:
    print(f"  {pair.left} + {pair.right} = {pair.value}")

Las parejas de núcleo se almacenan en el TTF interno kern Título: Fontes con OpenType GPOS El sistema de la base en lugar de una kern La tabla devolverá una lista vacía de Este método.


Formato de conversión

FontConverter.convert Convertir entre los formatos de fontos.Utilizar el FontType Enum para especificar el formato de destino, luego llamar to_bytes() Para ser seriados:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
from pathlib import Path

# TTF -> WOFF
ttf = FontLoader.open("MyFont.ttf")
woff = FontConverter.convert(ttf, FontType.WOFF)
Path("MyFont.woff").write_bytes(woff.to_bytes(FontType.WOFF))

# TTF -> WOFF2 (Brotli-compressed)
woff2 = FontConverter.convert(ttf, FontType.WOFF2)
Path("MyFont.woff2").write_bytes(woff2.to_bytes(FontType.WOFF2))

# WOFF -> WOFF2
existing_woff = FontLoader.open("MyFont.woff")
converted = FontConverter.convert(existing_woff, FontType.WOFF2)
Path("MyFont-from-woff.woff2").write_bytes(converted.to_bytes(FontType.WOFF2))

# WOFF2 -> WOFF (decompress back to WOFF 1)
existing_woff2 = FontLoader.open("MyFont.woff2")
woff1 = FontConverter.convert(existing_woff2, FontType.WOFF)
Path("MyFont-from-woff2.woff").write_bytes(woff1.to_bytes(FontType.WOFF))

Los cuatro caminos de conversión (TTF a WOFF, TTF al WofF2, WIFF A W OFF2 y WUFF2) son los que se utilizan para la conversion. La FCC) está apoyada por el mismo FontConverter.convert API.


Creación de un paquete web Font

WebFontBuilder.build genera un paquete de fontas web completo desde un único TTF Producirá WOFF, Woff2, y una previsión opcional SVG en una llamada:

from aspose_font.web import WebFontBuilder
from aspose_font.loader import FontLoader
from pathlib import Path

# Load a TTF source font
font = FontLoader.open("MyFont.ttf")

# Build WOFF + WOFF2 output files
WebFontBuilder.build(
    font=font,
    file_stem="MyFont",
    include_woff=True,
    font_display="swap",
    preview_text="The quick brown fox",
    instance_coordinates=None,
    output_dir=Path("web-output"),
)

Después de la llamada, web-output/ Contenido MyFont.woff, MyFont.woff2,y, Opcionalmente a MyFont-preview.svg.El font_display Los mapas de parámetros se encuentran directamente en El CSS font-display Describir y aceptar "auto", "block", "swap", "fallback",o "optional".


Inicio rápido

Instalar la biblioteca:

pip install "aspose-font>=1.0.0"

Cargue una letra WOFF y la convierte en Woff2:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
from pathlib import Path

# Load WOFF
font = FontLoader.open("MyFont.woff")
print(f"Font   : {font.font_name}")
print(f"Glyphs : {font.num_glyphs}")
print(f"Type   : {font.font_type}")

# Inspect metadata (if present) — WoffFont-specific property
xml = getattr(font, "metadata_xml", None)
print(f"Has metadata: {xml is not None}")

# Access inner OpenType tables — WoffFont-specific property
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")

# Convert to WOFF2
woff2 = FontConverter.convert(font, FontType.WOFF2)
Path("MyFont.woff2").write_bytes(woff2.to_bytes(FontType.WOFF2))
print("Converted to WOFF2")

Formatos de fontos web apoyados

FormatoExtensionesCargaConvertir en WOFFConvertir en WOFF2
TTF.TF
OTF.OTV
WOFF.Woff
WOFF2.El WooF2
EOT.El EOT
CFF.cff
TYPE1.pfb / pfa

Todos los formatos de fuente soportan la conversión a WOFF y WofF2 a través de FontConverter.convert.


Open Source y Licenciación

Aspose.Font FOSS for Python is released under the MIT License. You can use it in Proyectos personales, comerciales y de código abierto sin costo. el código fuente es disponible en GitHub y el paquete se distribuye a través de PyPI como: aspose-font.


Empezando a

Recursos relacionados