Cách làm việc với Bảng Phông chữ trong Python

Cách làm việc với Bảng Phông chữ trong Python

Hướng dẫn này cho thấy cách đọc các bảng TTF có tên, lấy các byte nhị phân thô của bảng, và ghi dữ liệu bảng đã chỉnh sửa bằng TtfFont trong Aspose.Font FOSS cho Python. Phông chữ TrueType lưu trữ tất cả dữ liệu trong các bảng nhị phân được xác định bằng các thẻ 4 ký tự. Aspose.Font FOSS cung cấp TtfTableSet để truy cập bảng có tên và TtfFont.get_table_bytes(tag) / TtfFont.set_table_bytes(tag, data) để truy cập nhị phân thô.

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 và TtfFont để tải tệp phông chữ và truy cập bộ bảng của nó:

from aspose_font import FontLoader
from aspose_font import TtfFont

Bước 3: Truy cập các Bảng Được Đặt Tên

Tải tệp TTF bằng FontLoader.open() và truy cập các bảng được đặt tên thông qua thuộc tính ttf_tables:

ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
tables = ttf_font.ttf_tables
print("kern present:", tables.kern is not None)
print("cmap present:", tables.cmap is not None)

Bước 4: Đọc Byte Thô của Bảng

Đọc dữ liệu nhị phân thô cho một bảng cụ thể bằng cách truyền thẻ 4 ký tự của nó cho get_table_bytes():

ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
raw = ttf_font.get_table_bytes("name")
print(f"name table: {len(raw)} bytes")

Bước 5: Ghi Byte Bảng Đã Sửa Đổi

Ghi dữ liệu nhị phân đã sửa đổi trở lại một bảng được đặt tên bằng cách sử dụng set_table_bytes() với thẻ và tải byte:

ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
modified = b"..."  # your modified binary data
ttf_font.set_table_bytes("GSUB", modified)

Các vấn đề thường gặp và cách khắc phục

AttributeError: Font has no attribute ttf_tables — ttf_tables đang bật TtfFont, không phải cơ sở Font lớp. Sử dụng ttf_font: TtfFont = FontLoader.open(...) để lấy một tham chiếu có kiểu.

get_table_bytes trả về byte rỗng — Thẻ phải có đúng 4 ký tự (điền thêm khoảng trắng nếu cần, ví dụ: "kern" not "KRN").

Câu hỏi thường gặp

Các bảng có tên nào được cung cấp trên TtfTableSet?

head, hhea, maxp, os2, name, post, cmap, loca, hmtx, và kern.

Tôi có thể thêm một bảng mới vào phông chữ không?

Có. Gửi bất kỳ thẻ 4-byte hợp lệ và dữ liệu byte nào đến TtfFont.set_table_bytes(tag, data).

Xem thêm

 Tiếng Việt