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 imagem | Extensão | Leia. | 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.