Úvod
Type 1 je původní škálovatelný formát fontů od Adobe, který předchází TrueType a OpenType. Fonty Type 1 se skládají ze dvou souborů: souboru .pfb (Printer Font Binary) obsahujícího šifrovaný program fontu a souboru .afm (Adobe Metriky písma) s údaji o kerningu a metrikách. Přestože byl nahrazen OpenType, fonty Type 1 zůstávají rozšířené v publikovacích pracovních postupech, PostScript pipelinech a archivních dokumentech.
Aspose.Font FOSS pro Python poskytuje přímý přístup k vnitřnostem Type 1 prostřednictvím Type1Font, Type1FontData, Type1Serializer a Type1Interpreter. Můžete načíst soubory PFB nebo PFA pomocí FontLoader.open, prozkoumat metadata vloženého programu fontu, interpretovat charstringy na cesty glifů a serializovat fonty zpět do formátu PFB nebo PFA.
Knihovna je zveřejněna na PyPI jako aspose-font a je licencována pod licencí MIT. Nemá žádné povinné komerční závislosti a běží na standardním Python 3.
Klíčové vlastnosti
Načítání fontů Type 1
Použijte FontLoader.open k načtení souboru PFB nebo PFA. Vrácený objekt poskytuje jak standardní rozhraní Font, tak specifickou funkčnost Type 1 prostřednictvím třídy Type1Font:
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 detekuje formát Type 1 automaticky z hlavičky souboru. Soubory PFB i PFA jsou oba podporovány.
Načítání metrik AFM
Písma Type 1 dodávají své metriky v samostatném souboru .afm. Třída Type1Font poskytuje metodu load_afm(path), která připojuje data AFM k načtenému objektu písma, což umožňuje vyhledávání párových kerningů pomocí get_kern_pairs().
Bez souboru AFM vrací get_kern_pairs() prázdný seznam, protože data kerningu jsou uložena v souboru AFM, nikoli přímo v programu PFB. Metoda load_afm přijímá řetězec cesty k souboru, který ukazuje na doprovodný soubor .afm.
Přístup k metadatům Type1FontData
Třída Type1FontData poskytuje slovník fontového programu vložený v souboru Type 1. Obsahuje metriky, ohraničující rámeček, vektor kódování, charstringy a podprogramy:
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
Vlastnosti Type1FontData:
font_name(str) — PostScript název písmafull_name(str) — úplný čitelný názevfamily_name(str) — rodina písmaweight(str) — řetězec váhy (např."Medium")italic_angle(float) — úhel kurzívy ve stupníchis_fixed_pitch(bool) — pravda pro monospace písmafont_bbox(tuple[int, int, int, int]) — ohraničující rámeček(llx, lly, urx, ury)underline_position(int) — pozice podtržení ve fontových jednotkáchunderline_thickness(int) — tloušťka čáry podtrženíencoding(list[str]) — 256-slotový vektor kódování (PostScript názvy glyfů)charstrings(dict[str, bytes]) — mapování názvu glyfu → bajtů charstringusubrs(list[bytes]) — podřetězce bajtů podprogramů používané charstringovým enginemlen_iv(int) — parametr šifrování lenIV
Interpretace charstringů
Type1Interpreter dekóduje programy Type 1 charstring do GlyphPath obrysů. Předávejte surové bajty charstringu z Type1FontData.charstrings do 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 vrací (GlyphPath, int) n-tici. GlyphPath obsahuje kreslicí příkazy pro obrys glyfu. Celé číslo je konečná hloubka zásobníku po vykonání, což je užitečné při ladění poškozených charstringů.
Serializace do PFB a PFA
Type1Serializer převádí načtené písmo Type 1 zpět do binárního formátu PFB nebo textového formátu PFA. Obě metody přijímají libovolnou instanci Font a vrací surová bajty:
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")
Metriky písma
Metriky a kódování jsou přístupné přes standardní rozhraní Font:
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}")
Rychlý start
Nainstalujte knihovnu:
.venv/bin/pip install aspose-font
Načtěte PFB písmo a prozkoumejte jej:
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")
Podporované formáty
| Formát | Přípona | Číst | Zapsat |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Písma Type 1 jsou načítána pomocí FontLoader.open a serializována pomocí Type1Serializer.
Open Source a licencování
Aspose.Font FOSS pro Python je vydáno pod licencí MIT. Můžete jej používat v osobních, komerčních i open-source projektech zdarma. Zdrojový kód je k dispozici na GitHub a balíček je distribuován přes PyPI jako aspose-font.