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å teckensnittetfull_name(str) — fullständigt läsbart namnfamily_name(str) — teckensnittsfamiljweight(str) — viktsträng (t.ex."Medium")italic_angle(float) — kursiv vinkel i graderis_fixed_pitch(bool) — true för monospace-teckensnittfont_bbox(tuple[int, int, int, int]) — begränsningsruta(llx, lly, urx, ury)underline_position(int) — understrykningsposition i teckensnittsenheterunderline_thickness(int) — understrykningslinjetjocklekencoding(list[str]) — 256-platsers kodningsvektor (PostScript glyfnamn)charstrings(dict[str, bytes]) — glyfnamn → charstring-byte-mappningsubrs(list[bytes]) — subrutin-bytesträngar som används av charstring-motornlen_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
| Format | Filändelse | Läsa | Skriva |
|---|---|---|---|
| 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.