Як працювати з таблицями шрифтів в Python
Цей керівництво показує, як читати названі таблиці TTF, отримувати байти двоякісних таблиць і писати змінені дані таблиц з використанням TtfFont в Aspose.Font FOSS для Python. Шрифти TrueType зберігають всі дані у двоякісних таблицях, ідентифікованих 4-знаковими тегами. Aspose.Font ФОСС експонує TtfTableSet для доступу до таблиці з іменем, а також TtfFont.get_table_bytes() / TtfFont.set_table_bytes() для двоякового доступу.
Крок за кроком посібник
Крок 1: Налаштування пакету
Інсталювати пакет Aspose.Font FOSS з PyPI за допомогою нижче наведеної команди pip:
pip install "aspose-font>=1.0.0"Крок 2: Необхідні класи імпорту
Import FontLoader і TtfFont завантажити файл шрифту та отримати доступ до його набору таблиць:
from aspose_font.loader import FontLoader
from aspose_font.ttf.font import TtfFontКрок 3: Доступ до таблиць з іменами
Завантажити файл TTF з: FontLoader.open() і доступ до названих таблиць через 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)Крок 4: Читання бітів таблиці в сироті
Читати сировими двоякісними даними для конкретної таблиці, передаючи її 4-значний тег на: 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")Крок 5: Напишіть змінені байти таблиці
Напишіть змінені двоякі дані назад до названої таблиці з використанням: set_table_bytes() з тегом та байтом корисної навантаження:
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
modified = b"..." # your modified binary data
ttf_font.set_table_bytes("GSUB", modified)Загальні проблеми та рішення
AttributeError: Font has no attribute ttf_tables — ttf_tables є на TtfFont, не підставі. Font клас. використовуйте ttf_font: TtfFont = FontLoader.open(...) отримати за допомогою запису.
get_table_bytes повертає порожні байти Знак повинен бути точно 4 символами. (падеж з пробілами, якщо це необхідно, наприклад. "kern" не є. "KRN").
Часто задавані запитання
Які названі таблиці відображені на TtfTableSet?
Головна, Hhea, MaxP, OS2, ім’я, пост, CMAP, LOCA, hmtx і ядро.
Чи можна додати нову таблицю до шрифту?
Передайте будь-які дійсні 4-байтові теги та байтове дані до TtfFont.set_table_bytes(tag, data).