Inleiding
Type1 is het oorspronkelijke schaalbare lettertypeformaat van Adobe, ouder dan TrueType en OpenType. Type-1-lettertypen bestaan uit twee bestanden: een .pfb (Printer Font Binary)-bestand dat het versleutelde lettertype-programma bevat, en een .afm (Adobe Lettertype-metrieken)-bestand met kerning- en metrische gegevens. Ondanks dat ze zijn vervangen door OpenType, blijven Type1-lettertypen wijdverspreid in publicatieworkflows, PostScript-pijplijnen en archiefdocumenten.
Aspose.Font FOSS voor Python biedt directe toegang tot de Type1-internals via Type1Font, Type1FontData, Type1Serializer en Type1Interpreter. Je kunt PFB- of PFA-bestanden laden via FontLoader.open, de ingesloten lettertype-programmeta-data inspecteren, charstrings interpreteren naar glyph-paden, en lettertypen serialiseren terug naar PFB- of PFA-formaat.
De bibliotheek wordt gepubliceerd op PyPI als aspose-font en is gelicentieerd onder de MIT-licentie. Hij heeft geen verplichte commerciële afhankelijkheden en draait op standaard Python3.
Belangrijkste functies
Type1-lettertypen laden
Gebruik FontLoader.open om een PFB- of PFA-bestand te laden. Het geretourneerde object biedt zowel de standaard Font-interface als Type-1-specifieke functionaliteit via de Type1Font-klasse:
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 detecteert het Type 1-formaat automatisch aan de hand van de bestandsheader. PFB- en PFA-bestanden worden beide ondersteund.
AFM-metrics laden
Type 1-lettertypen leveren hun metrics in een apart .afm-bestand. De Type1Font-klasse biedt een load_afm(path)-methode die de AFM-gegevens aan het geladen lettertype-object koppelt, waardoor kerning-paren kunnen worden opgezocht via get_kern_pairs().
Zonder het AFM-bestand geeft get_kern_pairs() een lege lijst terug omdat kerning-gegevens zich in het AFM-bestand bevinden, niet in het PFB-programma zelf. De load_afm-methode accepteert een bestandspad-string die naar het bijbehorende .afm-bestand wijst.
Toegang tot Type1FontData-metadata
De Type1FontData-klasse maakt het lettertype-programmadictionary bloot dat in het Type 1-bestand is ingebed. Het bevat metrics, de omhullende, coderingsvector, charstrings en subroutines:
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 eigenschappen:
font_name(str) — PostScript naam van het lettertypefull_name(str) — volledige leesbare naamfamily_name(str) — lettertypefamilieweight(str) — gewichtstekenreeks (bijv."Medium")italic_angle(float) — cursieve hoek in gradenis_fixed_pitch(bool) — waar voor monospatielettertypenfont_bbox(tuple[int, int, int, int]) — begrenzingsvak(llx, lly, urx, ury)underline_position(int) — onderstrepingspositie in lettereenhedenunderline_thickness(int) — dikte van onderstrepingslijnencoding(list[str]) — 256-slot coderingsvector (PostScript glyph-namen)charstrings(dict[str, bytes]) — glyph-naam → charstring-bytes mappingsubrs(list[bytes]) — subroutine-byte-strings gebruikt door de charstring-enginelen_iv(int) — lenIV encryptieparameter
Charstrings interpreteren
Type1Interpreter decodeert Type 1 charstring-programma’s naar GlyphPath contouren. Geef de ruwe charstring-bytes van Type1FontData.charstrings door aan 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 returnt een (GlyphPath, int) tuple. De GlyphPath bevat de tekenopdrachten voor de glyph-contour. Het gehele getal is de uiteindelijke stapeldiepte na uitvoering, wat nuttig is voor het debuggen van misvormde charstrings.
Serialiseren naar PFB en PFA
Type1Serializer converteert een geladen Type 1-lettertype terug naar binair PFB- of tekst-PFA-formaat. Beide methoden accepteren elke Font-instantie en retourneren ruwe bytes:
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")
Lettertype-metrieken
Metrieken en codering zijn toegankelijk via de standaard 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}")
Snelstart
Installeer de bibliotheek:
.venv/bin/pip install aspose-font
Laad een PFB-lettertype en inspecteer het:
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")
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Type 1-lettertypen worden geladen via FontLoader.open en geserialiseerd via Type1Serializer.
Open Source & Licenties
Aspose.Font FOSS voor Python wordt uitgebracht onder de MIT-licentie. Je kunt het gebruiken in persoonlijke, commerciële en open-source projecten zonder kosten. De broncode is beschikbaar op GitHub en het pakket wordt gedistribueerd via PyPI als aspose-font.