Wprowadzenie
Type 1 jest oryginalnym skalowalnym formatem czcionek Adobe, wcześniejszym od TrueType i OpenType. Czcionki Type 1 składają się z dwóch plików: .pfb (Printer Font Binary) zawierającego zaszyfrowany program czcionki oraz .afm (Adobe Metryki czcionki) z danymi o kerningu i metrykami. Pomimo że zostały wyparte przez OpenType, czcionki Type 1 nadal są powszechne w przepływach pracy wydawniczej, PostScript, oraz dokumentach archiwalnych.
Aspose.Font FOSS dla Python zapewnia bezpośredni dostęp do wewnętrznych elementów Type 1 poprzez Type1Font, Type1FontData, Type1Serializer i Type1Interpreter. Możesz wczytać pliki PFB lub PFA za pomocą FontLoader.open, przeglądać metadane osadzonego programu czcionki, interpretować charstringi na ścieżki glifów oraz serializować czcionki z powrotem do formatu PFB lub PFA.
Biblioteka jest opublikowana na PyPI jako aspose-font i licencjonowana na warunkach licencji MIT. Nie ma obowiązkowych zależności komercyjnych i działa na standardowym Python 3.
Kluczowe funkcje
Ładowanie czcionek Type 1
Użyj FontLoader.open do wczytania pliku PFB lub PFA. Zwrócony obiekt udostępnia zarówno standardowy interfejs Font, jak i funkcjonalność specyficzną dla Type 1 poprzez klasę 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 wykrywa format Type 1 automatycznie z nagłówka pliku. Pliki PFB i PFA są obsługiwane.
Ładowanie metryk AFM
Czcionki Type 1 zawierają swoje metryki w osobnym pliku .afm. Klasa Type1Font udostępnia metodę load_afm(path), która dołącza dane AFM do załadowanego obiektu czcionki, umożliwiając wyszukiwanie par kerningowych za pomocą get_kern_pairs().
Bez pliku AFM, get_kern_pairs() zwraca pustą listę, ponieważ dane kerningu znajdują się w pliku AFM, a nie w samym programie PFB. Metoda load_afm przyjmuje ciąg ścieżki pliku wskazujący na powiązany plik .afm.
Dostęp do metadanych Type1FontData
Klasa Type1FontData udostępnia słownik programu czcionki osadzony w pliku Type 1. Zawiera ona metryki, bounding box, encoding vector, charstrings i 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
Właściwości Type1FontData:
font_name(str) — PostScript nazwa czcionkifull_name(str) — pełna nazwa czytelna dla człowiekafamily_name(str) — rodzina czcionekweight(str) — ciąg wagi (np."Medium")italic_angle(float) — kąt pochylenia w stopniachis_fixed_pitch(bool) — prawda dla czcionek o stałej szerokościfont_bbox(tuple[int, int, int, int]) — obramowanie(llx, lly, urx, ury)underline_position(int) — pozycja podkreślenia w jednostkach czcionkiunderline_thickness(int) — grubość kreski podkreśleniaencoding(list[str]) — wektor kodowania 256-slotowy (PostScript nazw glifów)charstrings(dict[str, bytes]) — mapowanie nazwy glifu → bajtów charstringsubrs(list[bytes]) — ciągi bajtów podprogramów używane przez silnik charstringlen_iv(int) — parametr szyfrowania lenIV
Interpretacja charstringów
Type1Interpreter dekoduje programy Type 1 charstring do konturów GlyphPath. Przekaż surowe bajty charstring 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 zwraca krotkę (GlyphPath, int). GlyphPath zawiera polecenia rysowania dla konturu glifu. Liczba całkowita jest ostateczną głębokością stosu po wykonaniu, co jest przydatne przy debugowaniu uszkodzonych charstringów.
Serializacja do PFB i PFA
Type1Serializer konwertuje załadowany font Type 1 z powrotem do formatu binarnego PFB lub tekstowego PFA. Obie metody przyjmują dowolną instancję Font i zwracają surowe 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")
Metryki czcionki
Metryki i kodowanie są dostępne poprzez standardowy interfejs 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}")
Szybki start
Zainstaluj bibliotekę:
.venv/bin/pip install aspose-font
Załaduj font PFB i przejrzyj go:
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")
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Czcionki Type 1 są ładowane za pomocą FontLoader.open i serializowane za pomocą Type1Serializer.
Open Source i licencjonowanie
Aspose.Font FOSS dla Python jest udostępniony na licencji MIT. Możesz go używać w projektach osobistych, komercyjnych i open-source bez kosztów. Kod źródłowy jest dostępny na GitHub, a pakiet jest dystrybuowany przez PyPI jako aspose-font.