Introdução

Compact Font Format (CFF) é o formato de descrição de glifo binário usado dentro do OpenType . Fontes com um motor de contorno compatível com PostScript. Aspose.Fonte FOSS para exposições Python um conjunto específico de classes sob o aspose_font.cff Espaço de nomes para leitura e inspecção das estruturas de dados CFF: CffFont, CffCharset, CffEncoding, CffDict, CffIndex, e Type2Interpreter.Este post explica como carregar fontes CFF, Navegue em suas tabelas internas, e interpretar programas de charstring usando a biblioteca.

O pacote é licenciado pelo MIT. Instala-o com o software de Microsoft Windows. pip install aspose-font>=1.0.0.


Características principais

Carregamento de uma fonte CFF

FontLoader.open() detecta o formato CFF automaticamente passar ou um standalone .cff arquivo ou um ficheiro OTF que inclui uma tabela de contornos CFF. O objeto devolvido é um CffFont (acessível através do sítio Internet: http://www.europa.eu/en-mail/index_en.html) cff_font propriedade em TtfFont para os ficheiros OTF).

from aspose_font.loader import FontLoader

# Load a standalone CFF file
font = FontLoader.open("OpenSans.cff")

# Load a standalone CFF file (auto-detected from format)
font = FontLoader.open("OpenSans.cff")
print(font.font_name, font.num_glyphs)

CFF Charset Mapeamento de Glyph IDs para nomes

CffCharset mapeia os identificadores de glifos (GIDs) aos nomes dos glifo do PostScript. Use standard() a) para o obter o conjunto de caracteres Adobe ISO padrão ou from_reader() para analisar um conjunto de caracteres a partir do binário Dados da CFF. name_for() O método retorna o nome PostScript para um GID, e gid_for() Realiza a busca reversa.

from aspose_font.cff.charset import CffCharset

charset = CffCharset.standard()
print(charset.name_for(1))    # ".notdef" or similar
print(charset.gid_for("A"))   # GID for the PostScript name "A"

CFF Encoding Unicode-to-GID Mapping (Codificação de CFC)

CffEncoding Manter a tabela de codificação CFF, que mapeia códigos de caracteres para identificadores de glifos. standard() Retorna a codificação padrão, expert() Retorna a codificação do perito, e from_reader() analisa uma codificação personalizada de dados binários CFF. Use unicode_to_gid() a) para o Procure um GID por ponto de código Unicode e get_all_codepoints() para enumerar todos os mapeados Pontos de código.

from aspose_font.cff.encoding import CffEncoding

encoding = CffEncoding.standard()
gid = encoding.unicode_to_gid(0x41)  # Unicode for 'A'
all_codepoints = encoding.get_all_codepoints()
print(f"Standard encoding covers {len(all_codepoints)} code points")

Análise do dicionário CFF

As fontes CFF armazenam metadados privados e de nível superior em dicionários. CffDict.from_bytes() analisa uma CFF DICT blob bruto e dá-lhe get() e a) set() acesso por chave de operador. TopDict.from_dict() especializa-se neste domínio para os dicionários CFF de nível superior, e PrivateDict.from_dict() O mesmo acontece com os DICT privados.

from aspose_font.cff.dict_ import CffDict

# Parse a raw CFF DICT from bytes
raw_dict_bytes = b"..."  # CFF-encoded DICT bytes
d = CffDict.from_bytes(raw_dict_bytes)
vals = d.get(21)  # retrieve values for operator 21 (PostScript CharstringType)

Estruturas de índice CFF

CffIndex representa uma estrutura de dados CFF INDEX um conjunto com prefixo de comprimento de variável- longitude byte string usados para charstrings, subrs e tabelas de nomes. from_reader() Parses de texto um INDEX de uma leitura binária e o resultado é subscripcionavel por índice inteiro.

from aspose_font.cff.index import CffIndex
from aspose_font._io import BinaryReader  # internal API — may change between releases
import io

raw_index = b"..."  # raw CFF INDEX bytes
reader = BinaryReader(io.BytesIO(raw_index))
index = CffIndex.from_reader(reader)
print(f"INDEX entries: {len(index)}")

Interpretação de Charstring tipo 2

Type2Interpreter executa um programa de charstring Tipo 2 (o PostScript compacto-like O formato utilizado nas fontes CFF) e produz um GlyphPath De comando de esboço. interpret() com os bytes charstring e o dicionário privado associado. permite extrair contornos de glifos brutos a partir de cordas CFF sem uma completa Interpretação de PostScript.

from aspose_font.cff.type2 import Type2Interpreter

interpreter = Type2Interpreter()
glyph_path = interpreter.interpret(charstring_bytes, private_dict)
for cmd in glyph_path.commands:
    print(type(cmd).__name__, cmd)

Começo rápido

pip install aspose-font>=1.0.0
from aspose_font.loader import FontLoader

# Load an OTF with embedded CFF outlines
font = FontLoader.open("OpenSans-Regular.otf")

glyph_id = font.encoding.unicode_to_gid(0x41)
glyph = font.glyph_accessor.get_glyph_by_id(glyph_id)
print(f"Path commands for 'A': {len(glyph.path.commands)}")

Formatos suportados

Formatos de imagemExtensãoLeia.Escrever .
CFF.cff
OTF.oft
TTF.ttf
WOFF.- Não.
WOFF2.woff2
EOT.Não.
TYPE1.pfb / .pfa

Open Source & Licenciamento

Aspose.Font FOSS for Python is MIT licensed. Source code is on GitHub at Aspose-font-foss/Aspose.Font-FOSS-for-Python. Instalar a partir do PyPI como: aspose-font.


Começar a Fazer

Recursos relacionados