Introducere

WOFF (Web Open Font Format) este un container standard pentru furnizarea de fonturi pe web. WOff 1 înfășoară o tipă TrueType sau CFF cu compresie zlib; WOF 2 aplică, în schimb, compresiunea Brotli, obținând de obicei 20-30% mai bune raporturi de comprimare. Ambele formate sunt suportate de fiecare browser modern și sunt formatul recomandat de livrare pentru tipografia web .

Aspose.Font FOSS for Python exposes WOFF and WOFF2 through the WoffFont și de: Woff2Font Ambele clase împărtășesc același API: expun proprietățile fontului. (font_name, font_family, num_glyphs), un titlu opțional. metadata_xml bloc, o inner_font accesor care returna subiacentul TtfFont, şi a to_bytes() metodă de conversie a formatului.

Biblioteca este publicată pe PyPI ca: aspose-font şi licenţiat de MIT. Licenţă fără dependenţe comerciale obligatorii.


Caracteristici cheie

Încărcarea fonturilor WOFF și WOff2

Utilizare: FontLoader.open Pentru a încărca un fișier WOFF sau WOff2. din fişier magic bytes automat:

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 returnează un WoffFont pentru: .woff fişierele şi un Woff2Font pentru: .woff2 Ambele clase implementează acelaşi lucru. Font Interfaţă de bază, deci codul care citeste proprietatile este identic pentru ambele formate.


Inspecția metadatele WOFF

Fișierele WOFF pot include un bloc de metadate XML opțional care conține licențe. Informaţii, credite şi o descriere a fontului. metadata_xml proprietate:

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")

În ceea ce priveşte metadata_xml proprietatea returnează o str care conține XML-ul brut sau None dacă: fontul nu include un bloc de metadate. Ambele sunt disponibile pentru a fi utilizate în mod corespunzător: WoffFont și de: Woff2Font expunerea proprietatea asta.


Accesarea tabelurilor TTF interne

WOFF și WOff2 înfășoară un font TrueType. inner_font proprietate vă oferă o subiacente TtfFont cu acces complet la setul său de tabele 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)}")

Prin intermediul inner_font.ttf_tables puteți accesa toate tabele standard OpenType: head, hhea, maxp, os2, name, și post.Pentru tabele fără nume accesoriu, utilizare inner_font.get_blob(tag) să recupereze bați brute prin tag OpenType.


Perechi de kern dintr-un font WOFF

get_kern_pairs() returnă toate perechile de kern încorporate în font. Fiecare KernPair transportă left (GlyphId), right (GlyphId) și value (int, în unități 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}")

Perechile de nucleu sunt stocate în TTF-urile interioare. kern Fonte cu OpenType GPOS caracteristici de kern în loc de o kern tabelul va returna o listă goală de la această metodă.


Conversiunea formatului

FontConverter.convert convertează între formate de font. Folosiţi FontType înaltă pentru a specifica formatul țintă, apoi sunați to_bytes() pentru serializare:

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))

Toate cele patru căi de conversie (TTF la WOFF, TTF la WWFF2, Woff la Wovff2, Woff2 la WOFF) sunt susţinute de aceleaşi FontConverter.convert API.


Construirea unui pachet de fonturi web

WebFontBuilder.build generează un pachet complet de font web dintr-un singur TTF. Produc WOFF, WOff2 și un SVG opțional de previzualizare într-o singură apelare:

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"),
)

După apel, web-output/ conţine: MyFont.woff, MyFont.woff2, și opțional un MyFont-preview.svg.- Ce ? font_display mapă parametri direct la CSS-ul font-display descriptorul și acceptă "auto", "block", "swap", "fallback", sau "optional".


Început rapid

Instalați biblioteca:

pip install "aspose-font>=1.0.0"

Încărcați un font WOFF și să-l convertiți în 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")

Formatele de font suportate pentru web

FormatulExtinderePeste 100 kgConvertiti în WOFFConvertiți la WOFF2
TTF.ttfDa, sunt.Da, sunt.Da, sunt.
OTF.de laDa, sunt.Da, sunt.Da, sunt.
WOFF.- Ce ?Da, sunt.Da, sunt.
WOFF2.woff2 (în limba engleză)Da, sunt.Da, sunt.
EOT.Nu.Da, sunt.Da, sunt.Da, sunt.
CFF.cffDa, sunt.Da, sunt.Da, sunt.
TYPE1.pfb/.pfaDa, sunt.Da, sunt.Da, sunt.

Toate formatele surse suportă conversia în WOFF și WOff2 prin intermediul FontConverter.convert.


Sursă deschisă și licență

Aspose.Font FOSS for Python is released under the MIT License. You can use it in Proiectele personale, comerciale și open-source fără costuri. Codul sursă este disponibil pe GitHub și pachetul este distribuit prin PyPI ca aspose-font.


Cum să începem?

Resurse conexe