Introduction
Тип 1 - оригінальний масштабний формат шрифту Adobe, який був раніше від TrueType і OpenTyme. Шрифти типу 1 складаються з двох файлів: a .pfb (Бінарний принтерський шрифт) файл, що містить програм зашифрованого шрифту, а також .afm (Adobe Font Metrics) файл з кернінгом і Незважаючи на заміни OpenType, шрифти типу 1 залишаються поширеніми в різних країнах. публікація робочих потоків, піводородів PostScript та архівних документів.
Aspose.Font FOSS for Python provides direct access to Type 1 internals through Type1Font, Type1FontData, Type1Serializer, і Type1Interpreter.Ви можете завантажити. Файли PFB або PFA через: FontLoader.open, перевіряє вбудовані метадані програми шрифту, інтерпретувати чарстринги на шляхи гліфа, і серіалізувати шрифти назад у формат PFB або PFA.
Бібліотека опублікована на PyPI як: aspose-font і ліцензована під Ліцензією MIT. Він не має обов’язкових комерційних залежностей і працює на стандартному Python 3.
Ключові особливості
Завантаження шрифтів типу 1
Використання FontLoader.open Відвернутий об’єкт викриває як файл PFB, так і PFA. стандартний Font інтерфейс і функціональність, що специфічна для типу 1, через 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 автоматично виявляє формат типу 1 з заголовку файлу. PFB і файли PFA підтримуються.
Завантаження AFM метрики
Шрифти типу 1 розміщують свої метрики в окремому форматі. .afm Файл. Type1Font клас викриває load_afm(path) метод, який прикріпляє дані AFM до завантаженого об’єкта шрифту;, дозволяють пошук пар ядра через: get_kern_pairs().
Без файлу AFM, get_kern_pairs() повертає порожній список, оскільки дані ядра зберігаються. в файлі AFM, а не у самій програмі PFB. load_afm метод приймає файл Шнур шляху, що вказує на компаньонку. .afm файл.
Доступ до метаданих типу 1FontData
У. Type1FontData клас викриває словник програми шрифтів, вбудований у Тип 1 Він включає в себе метрики, рамкові скриньки ( bounding box), вектор кодування, charstrings та підпрограми:
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 властивості:
font_name(str) PostScript ім’я шрифтаfull_name(str) повне людське ім’яfamily_name(str) сім’я шрифтівweight(str) вага струн (наприклад."Medium")italic_angle(float) курсивний кут у градусахis_fixed_pitch(bool) для монопросторних шрифтівfont_bbox(tuple[int, int, int, int]) розмежувальна рамка(llx, lly, urx, ury)underline_position(int) підчеркнення позиції в одиницях шрифтуunderline_thickness(int) товщина підчеркненняencoding(list[str]) 256-слот кодування вектор (назви гліфов PostScript)charstrings(dict[str, bytes]) назва гліфа → мапіровка байтів чарстрингуsubrs(list[bytes]) підпрограми байт-строги, що використовуються двигуном зарядки.len_iv(int) параметр шифрування lenIV
Витворення Чарстрингс
Type1Interpreter декодувати програми зарядки типу 1 в GlyphPath Пройди. сировини зарядних байтів від Type1FontData.charstrings до 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 повертає a (GlyphPath, int) “Топль”. GlyphPath містить малюнок. Це ціле число є остаточною глибиною стека після виконання, що корисне для виправлення деформацій.
Серіалізація до PFB та PFA
Type1Serializer перетворює завантажений шрифт типу 1 назад у двоякі формат PFB або текст PFA. Обидва методи приймають будь-які Font випадок і повертає нерозроблені байти:
from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer
# 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")
Метрика шрифтів
Метаграфії та кодування доступні через стандарт. Font інтерфейс:
from aspose_font import FontLoader
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}")
Швидкий старт
Інсталювати бібліотеку:
.venv/bin/pip install aspose-font
Завантажити шрифт PFB і перевірити його:
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")
Підтримувані формати
| Format | Extension | Read | Write |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .оф | ✓ | — |
| EOT | . ніщо | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .- Я не знаю. | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Шрифти типу 1 завантажуються через: FontLoader.open і серіалізовано через: Type1Serializer.
Відкритий код та ліцензія
Aspose.Font FOSS for Python is released under the MIT License. You can use it in Персональні, комерційні та відкриті проекти без витрат. доступний на GitHub, а пакет розповсюджений через PyPI як: aspose-font.