Introduktion

Type 1 är Adobes ursprungliga skalbara teckensnittformat, som föregick TrueType och OpenType. Type 1-teckensnitt består av två filer: en .pfb (Printer Font Binary)-fil som innehåller det krypterade teckensnittprogrammet, och en .afm (Adobe Typsnittsmått)-fil med kerning- och metrisk data. Trots att de har ersatts av OpenType är Type 1-teckensnitt fortfarande vanliga i publiceringsarbetsflöden, PostScript-pipelines och arkiveringsdokument.

Aspose.Font FOSS för Python ger direkt åtkomst till Type 1:s interna strukturer via Type1Font, Type1FontData, Type1Serializer och Type1Interpreter. Du kan ladda PFB- eller PFA-filer via FontLoader.open, inspektera den inbäddade teckensnittprogrammets metadata, tolka charstrings till glyfvägar och serialisera teckensnitt tillbaka till PFB- eller PFA-format.

Biblioteket publiceras på PyPI som aspose-font och är licensierat under MIT-licensen. Det har inga obligatoriska kommersiella beroenden och körs på standard Python 3.


Nyckelfunktioner

Laddning av Type 1-teckensnitt

Använd FontLoader.open för att ladda en PFB- eller PFA-fil. Det returnerade objektet exponerar både det standard Font-gränssnittet och Type 1-specifik funktionalitet via Type1Font-klassen:

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 upptäcker Type 1-formatet automatiskt från filhuvudet. PFB- och PFA-filer stöds båda.


Läser in AFM-mått

Type 1-teckensnitt levererar sina mått i en separat .afm-fil. Type1Font-klassen exponerar en load_afm(path)-metod som bifogar AFM-data till det inlästa teckensnittobjektet, vilket möjliggör uppslagning av kernpar via get_kern_pairs().

Utan AFM-filen returnerar get_kern_pairs() en tom lista eftersom kern-data finns i AFM-filen, inte i PFB-programmet självt. load_afm-metoden accepterar en sökvägssträng som pekar på den medföljande .afm-filen.


Åtkomst till Type1FontData-metadata

Type1FontData-klassen exponerar teckensnittets programordbok som är inbäddad i Type 1-filen. Den innehåller mått, omgivningsruta, kodningsvektor, charstrings och subrutiner:

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 egenskaper:

  • font_name (str) — PostScript namn på teckensnittet
  • full_name (str) — fullständigt läsbart namn
  • family_name (str) — teckensnittsfamilj
  • weight (str) — viktsträng (t.ex. "Medium")
  • italic_angle (float) — kursiv vinkel i grader
  • is_fixed_pitch (bool) — true för monospace-teckensnitt
  • font_bbox (tuple[int, int, int, int]) — begränsningsruta (llx, lly, urx, ury)
  • underline_position (int) — understrykningsposition i teckensnittsenheter
  • underline_thickness (int) — understrykningslinjetjocklek
  • encoding (list[str]) — 256-platsers kodningsvektor (PostScript glyfnamn)
  • charstrings (dict[str, bytes]) — glyfnamn → charstring-byte-mappning
  • subrs (list[bytes]) — subrutin-bytesträngar som används av charstring-motorn
  • len_iv (int) — lenIV-krypteringsparameter

Tolka charstrings

Type1Interpreter avkodar Type 1 charstring-program till GlyphPath konturer. Skicka de råa charstring-bytena från Type1FontData.charstrings till 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 returnerar en (GlyphPath, int)-tuple. GlyphPath innehåller ritkommandona för glyfkonturen. Heltalet är det slutliga stackdjupet efter exekvering, vilket är användbart för felsökning av felaktiga charstrings.


Serialisering till PFB och PFA

Type1Serializer konverterar ett inläst Type 1-typsnitt tillbaka till binärt PFB- eller text PFA-format. Båda metoderna accepterar vilken Font instans som helst och returnerar råa byte:

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

Typsnittsmått

Mått och kodning är tillgängliga via det standard Font gränssnittet:

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

Snabbstart

Installera biblioteket:

.venv/bin/pip install aspose-font

Läs in ett PFB-typsnitt och inspektera det:

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

Stödda format

FormatFiländelseLäsaSkriva
TTF.ttf✓—
OTF.otf✓—
EOT.eot✓—
CFF.cff✓—
TYPE1.pfb/.pfa✓—
WOFF.woff✓—
WOFF2.woff2✓—

Type 1-typsnitt laddas via FontLoader.open och serialiseras via Type1Serializer.


Öppen källkod & licensiering

Aspose.Font FOSS för Python är släppt under MIT-licensen. Du kan använda den i personliga, kommersiella och öppna källkodsprojekt utan kostnad. Källkoden finns tillgänglig på GitHub och paketet distribueras via PyPI som aspose-font.


Komma igång

Relaterade resurser