Introduction

Type 1 est le format de phonture scalable d’Adobe, qui prédit TrueType et OpenTYpe. Les phares de type 1 sont composés de deux fichiers : a. .pfb (Fiche de la fiche d’impression) contenant le Un programme de chiffrement et un .afm (Adobe Font Metrics) fichier avec céramique et Même si OpenType est remplacé par des fonctions, les phrases de type 1 sont toujours prévalentes dans le publication de flux de travail, pipelines PostScript et documents d’archivage.

Aspose.Font FOSS for Python provides direct access to Type 1 internals through Type1Font, Type1FontData, Type1Serializer,et Type1Interpreter.Vous pouvez charger Fichiers PFB ou PFA par le biais de FontLoader.open,- Inspecter les métadonnées du programme de fonctions intégrées, interpréter les charstrings sur des voies glyphes, et sérialiser les phrases en retour au format PFB ou PFA.

La bibliothèque est publiée sur Pypi comme aspose-font Il est licencié sous la licence MIT. Il n’a pas de dépendance commerciale obligatoire et fonctionne sur la norme Python 3.


Fonctionnalités clés

Type 1 de fonts

Utiliser FontLoader.open pour charger un fichier PFB ou PFA. l’objet retourné expose les deux standard Font fonctionnalités et interfaces spécifiques de type 1 à travers le Type1Font Classement :

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 détecte le format Type 1 automatiquement de l’encadrement du fichier.PFB Les fichiers PFA sont tous les deux soutenus.


Métriques AFM

Type 1 fonts envoyent leurs métrics dans un .afm fichier : le Type1Font Classes Exposé à load_afm(path) méthode qui attache les données AFM à l’objet de la lettre chargée, Pour les paires de recherche par le biais du get_kern_pairs().

Sans le fichier AFM, get_kern_pairs() Retourne une liste vide parce que les données cernales vivent dans le fichier AFM, pas dans la PFB elle-même. load_afm Le mode accepte un fichier Le chemin de la route qui fait référence à l’associé .afm fichier .


Accès à Type1FontData Metadata

Le Type1FontData classe exposé le dictionnaire de programme de phon intégré dans le type 1 Il comprend les métrics, la boîte de bord, le vecteur de codage, les charstrings et les sous-routines:

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 Propriétés :

  • font_name (str- PostScript nom du font
  • full_name (strNom complet humain-lédiable
  • family_name (str- La famille font
  • weight (str- la chaîne de poids (par exemple,. "Medium")
  • italic_angle (float- angle italien en degrés
  • is_fixed_pitch (bool- pour les monospaires
  • font_bbox (tuple[int, int, int, int]- La boîte de bord (llx, lly, urx, ury)
  • underline_position (int- position sous-line dans les unités de font
  • underline_thickness (int- souligner la densité de l’infarctus
  • encoding (list[str]256-Slot codage vecteur (noms de glyph PostScript)
  • charstrings (dict[str, bytes]- nom glyph → charstring bytes mappage
  • subrs (list[bytes]) — les filets de byte subroutine utilisés par le moteur de chartration
  • len_iv (intParamètres de cryptage Lenovo

Interprétation de chartrings

Type1Interpreter Déconnecter les programmes de type 1 en GlyphPath Étiquette : Pass Les charstrations de bits de Type1FontData.charstrings à 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 Retour à A (GlyphPath, int) Tombé : le GlyphPath Il contient le dessin Commandes pour la ligne d’échelle de glyph. l’intégralité est la profondeur finale après exécution, qui est utile pour débarrasser les chartrings malformés.


Série à PFB et PFA

Type1Serializer Convertit une phonture de type 1 chargée en format PFB binaire ou texte. Les deux méthodes acceptent toute Font - Instance et retour des bytes crus :

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")

Métrique Font

Métriques et codage sont accessibles par le standard 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}")

Démarrage rapide

Installation de la bibliothèque :

.venv/bin/pip install aspose-font

Téléchargez un fichier PFB et vérifiez :

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")

Formats soutenus

FormatsExtensionLireÉcrire
TTF.TFD
OTF.OTP
EOT.EOT
CFF.CFF
TYPE1.pfb / pfa
WOFF.Voff
WOFF2.Le Wooff2

Type 1 fonts sont chargés par FontLoader.open sérialisé par Type1Serializer.


Source ouverte et licence

Aspose.Font FOSS for Python is released under the MIT License. You can use it in des projets personnels, commerciaux et open source sans coût. le code source est disponible sur GitHub et le package est distribué via PyPI comme aspose-font.


Pour commencer

Ressources associées