Introduction
Тип 1 - оригинальный масштабируемый формат шрифта Adobe, предшествующий TrueType и OpenTyme. Шрифты типа 1 состоят из двух файлов: a. .pfb (Бинный шрифт принтера) файл, содержащий программу шифрования шрифтов, и .afm (Adobe Font Metrics) файл с kerning и Несмотря на то, что шрифты типа 1 были заменены OpenType, они по-прежнему распространены в большинстве других типов. публикация рабочих процессов, пип-линии PostScript и архивные документы.
Aspose.Font FOSS for Python provides direct access to Type 1 internals through Type1Font, Type1FontData, Type1Serializer, и Type1Interpreter.- Вы можете загрузить . Файлы PFB или PFA через: FontLoader.open, проверяет встроенные метаданные шрифтов программы, интерпретировать charstrings на пути с помощью глифа и сериализировать шрифты обратно в формат 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 Он включает в себя метрику, рамки, векторы кодирования, 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) Название шрифта PostScriptfull_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 Пройдите. необработанные байты charstring от 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 содержит рисунок. Целое число - это конечная глубина стека после исполнения, что полезно для отлаживания деформированных charstrings.
Сериализация на 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.