Como trabalhar com tabelas de fontes em Python

Como trabalhar com tabelas de fontes em Python

Este guia mostra como ler tabelas TTF nomeadas, recuperar bytes de tabela binária cru e escrever dados da tabulação modificada usando TtfFont em Aspose.Font FOSS para Python. As fontes TrueType armazenam todos os dados em tabelas binárias identificadas por tags de 4 caracteres. Aspose.Font Exposos Foss TtfTableSet para acesso a uma tabela com nome e TtfFont.get_table_bytes() / TtfFont.set_table_bytes() para acesso binário bruto.

Guia passo a passo

Passo 1: Instalar o pacote

Instale o pacote Aspose.Email FOSS a partir do PyPI usando o comando pip abaixo:

pip install "aspose-font>=1.0.0"

Passo 2: Importar as classes necessárias

Importação FontLoader e a) TtfFont para carregar um ficheiro de fonte e aceder ao conjunto das tabelas:

from aspose_font.loader import FontLoader
from aspose_font.ttf.font import TtfFont

Passo 3: Acesse a tabelas com nomes

Carregar um arquivo TTF com FontLoader.open() e acesso às tabelas nomeadas através do ttf_tables propriedade:

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)

Passo 4: Ler bytes de tabela cru

Leia os dados binários brutos para uma tabela específica passando a sua etiqueta de 4 caracteres para 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")

Passo 5: Escrever bytes de tabela modificados

Escrever dados binários modificados de volta para uma tabela nomeada usando set_table_bytes() com a etiqueta e o byte de carga útil:

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

Problemas comuns e soluções

AttributeError: Font has no attribute ttf_tablesttf_tables está ligado. TtfFont, não a base. Font classe. uso de ttf_font: TtfFont = FontLoader.open(...) para obter um referência digitada.

get_table_bytes Retorna bytes vazios A etiqueta deve ter exactamente 4 caracteres. (pad com espaços, se necessário, por exemplo. "kern" Não, não. "KRN").

Perguntas Frequentes

Quais tabelas com nomes estão expostas no TtfTableSet?

cabeça, hhea, maxp, os2, nome, posto, cmap, loca, hmtx e kern.

Posso adicionar uma nova tabela a uma fonte?

Passe qualquer etiqueta válida de 4 bytes e dados em byte para o TtfFont.set_table_bytes(tag, data).

Ver também:

 Português