Cách làm việc với phông chữ WOFF trong Python
Hướng dẫn này cho thấy cách tải, kiểm tra và chuyển đổi phông chữ web WOFF và WOFF2 bằng Aspose.Font FOSS cho Python. WOFF (Web Open Font Format) là tiêu chuẩn để cung cấp phông chữ trên web. WOFF 1 sử dụng nén zlib và WOFF 2 sử dụng nén Brotli, cả hai đều bao bọc một phông chữ TrueType hoặc CFF cơ bản. Aspose.Font FOSS tải cả hai định dạng và tiết lộ dữ liệu phông chữ nội bộ thông qua một API sạch sẽ.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
Cài đặt gói Aspose.Font FOSS bằng lệnh dưới đây:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Bước 2: Nhập các lớp cần thiết
Nhập FontLoader, FontConverter và FontType để tải và chuyển đổi phông chữ WOFF:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeBước 3: Tải và Kiểm tra một phông chữ WOFF
Tải một tệp WOFF bằng FontLoader.open() và đọc các thuộc tính cơ bản như tên, họ và số glyph:
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}")Bước 4: Đọc siêu dữ liệu WOFF
Các tệp WOFF có thể chứa một khối siêu dữ liệu XML với giấy phép, công nhận và mô tả. Truy cập nó qua thuộc tính 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")Bước 5: Truy cập các bảng TTF bên trong
Cả WoffFont và Woff2Font đều cung cấp một thuộc tính inner_font cho phép bạn lấy TtfFont cơ bản. Thông qua nó, bạn có thể truy cập tất cả các bảng OpenType tiêu chuẩn.
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)}")Bước 6: Chuyển đổi TTF sang WOFF
Tải một phông chữ TTF và chuyển đổi nó sang định dạng WOFF bằng cách truyền FontType.WOFF tới 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)Bước 7: Chuyển đổi TTF sang WOFF2
Tải một phông chữ TTF và chuyển đổi nó sang định dạng WOFF2 bằng cách truyền FontType.WOFF2 tới 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)Bước 8: Chuyển đổi giữa WOFF và WOFF2
Chuyển đổi một tệp WOFF đã tải sang WOFF2 (hoặc ngược lại) bằng cách truyền FontType mục tiêu tới 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)Các vấn đề thường gặp và cách khắc phục
FontParseException: Invalid WOFF signature — Tệp không phải là phông chữ WOFF hợp lệ. Kiểm tra xem tệp có bị hỏng không và bắt đầu bằng các byte magic của WOFF.
FontParseException: WOFF table decompression failed — Một bảng nén bên trong tệp WOFF bị hỏng. Hãy thử tải lại tệp phông chữ.
Đầu ra WOFF2 lớn — WOFF2 sử dụng nén Brotli, tạo ra các tệp nhỏ hơn so với WOFF 1 (zlib). Nếu đầu ra WOFF2 của bạn bất ngờ lớn, hãy chắc chắn rằng bạn bắt đầu từ nguồn TTF đã được tối ưu.
Các câu hỏi thường gặp
Sự khác biệt giữa WOFF và WOFF2 là gì?
WOFF 1 sử dụng nén zlib và WOFF 2 sử dụng nén Brotli. WOFF2 thường đạt được mức nén tốt hơn 20-30% so với WOFF 1. Cả hai đều bao bọc cùng dữ liệu phông chữ TrueType hoặc CFF gốc.
Tôi có thể truy cập các bảng phông chữ từ tệp WOFF không?
Có. Sử dụng thuộc tính inner_font để lấy TtfFont gốc, sau đó truy cập các bảng qua inner_font.ttf_tables.
Thư viện có hỗ trợ siêu dữ liệu WOFF không?
Có. Cả WoffFont và Woff2Font đều cung cấp một thuộc tính metadata_xml chứa khối metadata XML tùy chọn.