Introdução
O tipo 1 é o formato de fonte escalável original da Adobe, anterior ao TrueType e OpenTyme. As fontes de tipo 1 consistem em dois ficheiros: a) .pfb (Printer Font Binary) arquivo que contém o programa de fontes criptografadas, e um .afm (Adobe Font Metrics) arquivo com kerning e Apesar de ter sido substituído pelo OpenType, as fontes Tipo 1 continuam a prevalecer em vários países. publicação de fluxos de trabalho, pipelines PostScript e documentos de arquivo.
Aspose.Font FOSS for Python provides direct access to Type 1 internals through Type1Font, Type1FontData, Type1Serializer, e Type1Interpreter.Podes carregar . Arquivos PFB ou PFA via: FontLoader.open, inspecionar os metadados do programa de fontes incorporadas, interpretar charstrings para caminhos de glifo, e serializar fontes de volta ao formato PFB ou PFA.
A biblioteca é publicada no PyPI como: aspose-font e licenciado sob a licença MIT. Não tem dependências comerciais obrigatórias e é executado no padrão Python 3.
Características principais
Carregamento de fontes tipo 1
Utilização: FontLoader.open O objeto devolvido expõe tanto o arquivo PFB como o PFA. padrão Font Interface e funcionalidade específica do tipo 1 através da interface de Type1Font classe:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Courier.pfb")
print(loaded.font_name) # e.g. "Courier"
print(loaded.font_family) # e.g. "Courier"
print(loaded.num_glyphs) # number of defined glyphs
print(loaded.font_style) # style string, e.g. "Regular"
FontLoader.open detecta o formato Tipo 1 automaticamente a partir do cabeçalho de ficheiro. PFB e arquivos PFA são ambos suportados.
Métricas de carga AFM
Tipos de fontes 1 enviar suas métricas em um separado .afm O arquivo. Type1Font classe de trabalho expõe um load_afm(path) método que liga os dados AFM ao objeto de fonte carregado, permitindo pesquisas de pares de núcleos via: get_kern_pairs().
Sem o ficheiro AFM, get_kern_pairs() Retorna uma lista vazia porque os dados do kern são vivos. O programa PFB não é o que está no ficheiro AFM. load_afm método aceita um ficheiro linha de trajetória apontando para o companheiro .afm Arquivo.
Acesso a metadados de tipo 1FontData
A Comissão Type1FontData classe expõe o dicionário de programação de fontes incorporado no Tipo 1 Ele inclui métricas, caixa de limitação, vetor de codificação, charstrings e sub-rotinas:
from aspose_font.type1.data import Type1FontData
# Type1FontData is the font program dictionary parsed from the PFB
# Access its properties to inspect the raw PostScript font data
Type1FontData propriedades:
font_name(str) Nome da fonte PostScriptfull_name(str) nome completo legível pelo homemfamily_name(str) Família de fontesweight(str) cordas de peso (por exemplo:."Medium")italic_angle(float) ângulo cursiva em grausis_fixed_pitch(bool) válido para fontes monospaciais.font_bbox(tuple[int, int, int, int]) caixa de conexão(llx, lly, urx, ury)underline_position(int) posição de sublinhação em unidades de fonteunderline_thickness(int) espessura da linha de subrelhosencoding(list[str]) Vector de codificação por slots 256 (nome dos glifos do PostScript)charstrings(dict[str, bytes]) nome do glifo → cartografia de bytes da redesubrs(list[bytes]) cadeias de bytes sub-routine utilizadas pelo motor de carregamentolen_iv(int) parâmetro de encriptação lenIV
Interpretação de Charstrings
Type1Interpreter Decodifica programas de charstring Tipo 1 em: GlyphPath - Passar. Os bytes de charstring cru são: Type1FontData.charstrings a) para o interpret:
from aspose_font.type1.interpreter import Type1Interpreter
interpreter = Type1Interpreter()
charstring = b"\x0e" # seac or other charstring bytes
glyph_path, stack_depth = interpreter.interpret(charstring)
for cmd in glyph_path.commands:
print(cmd)
interpret retorna um (GlyphPath, int) O tuple. GlyphPath contém o desenho. O inteiro é a profundidade final da pilha após execução, que é útil para depurar cordas de carros mal formados.
Serialização para PFB e PFA
Type1Serializer converte uma fonte de tipo 1 carregada para o formato binário PFB ou texto PFA. Ambos os métodos aceitam qualquer tipo de Font instância e retornar bytes brutos:
from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer
loaded = FontLoader.open("fonts/Courier.pfb")
# Serialize to PFB (binary) format
pfb_bytes = Type1Serializer.serialize_pfb(loaded)
with open("output/Courier_copy.pfb", "wb") as fh:
fh.write(pfb_bytes)
# Serialize to PFA (text) format
pfa_bytes = Type1Serializer.serialize_pfa(loaded)
with open("output/Courier_copy.pfa", "wb") as fh:
fh.write(pfa_bytes)
print(f"PFB: {len(pfb_bytes)} bytes")
print(f"PFA: {len(pfa_bytes)} bytes")
Metricas de fonte
As métricas e a codificação são acessíveis através do padrão. Font Interface:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Courier.pfb")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Underline pos : {metrics.underline_position}")
print(f"Underline tck : {metrics.underline_thickness}")
Começo rápido
Instalar a biblioteca:
.venv/bin/pip install aspose-font
Carregar uma fonte PFB e inspecioná-la:
from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer
loaded = FontLoader.open("Courier.pfb")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Style : {loaded.font_style}")
print(f"Glyphs : {loaded.num_glyphs}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
# Round-trip: serialize back to PFB
pfb_bytes = Type1Serializer.serialize_pfb(loaded)
print(f"Serialized: {len(pfb_bytes)} bytes")
Formatos suportados
| Formatos de imagem | Extensão | Leia. | Escrever . |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .oft | ✓ | — |
| EOT | .Não. | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .- Não. | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
As fontes de tipo 1 são carregadas via: FontLoader.open e serializado através de: Type1Serializer.
Open Source & Licenciamento
Aspose.Font FOSS for Python is released under the MIT License. You can use it in O código-fonte é o código de acesso a todos os projetos pessoais, comerciais e open source sem custo. disponível no GitHub e o pacote é distribuído via PyPI como aspose-font.