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 PostScript
  • full_name (str) nome completo legível pelo homem
  • family_name (str) Família de fontes
  • weight (str) cordas de peso (por exemplo:. "Medium")
  • italic_angle (float) ângulo cursiva em graus
  • is_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 fonte
  • underline_thickness (int) espessura da linha de subrelhos
  • encoding (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 rede
  • subrs (list[bytes]) cadeias de bytes sub-routine utilizadas pelo motor de carregamento
  • len_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 imagemExtensãoLeia.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.


Começar a Fazer

Recursos relacionados