Ну, вы уже обнаружили два "ярлыка". FontBBox дает ограничивающую рамку для всех глифов в шрифте, наложенных вместе. false charpath flattenpath pathbbox
дает поле для указанной строки.
Для шрифта типа 3 (определяемого пользователем) это все, что вы можете разумно ожидать; но для более популярных шрифтов Type 1 существует множество метрической информации как в шрифте, так и в файле «metrics» (для других приложений).
Но это та часть, которую я не очень хорошо знаю. Итак, я собираюсь прочитать (в руководстве по Adobe Type 1) и расширить этот ответ позже.
Редактировать: На самом деле, похоже, что это может быть лучшим способом в целом.
Там - это массив значений вертикального выравнивания шрифтом типа 1 в / частном словаре под именем / BlueValues; но нет никакой гарантии, что шрифт их соблюдает. Первое число в массиве - базовый выброс ; это нижний край букв типа «О», которые опускаются ниже базовой линии. И самое большое значение в массиве будет либо: превышение по высоте , либо превышение по высоте (в зависимости от того, что выше). Но любой отдельный символ может быть нанесен без учета этих значений (следовательно, нет гарантии).
С другой стороны, сам FontBBox может отражать ограничивающую рамку любых «специальных» символов, присутствующих в шрифте, независимо от того, доступны ли они через вектор кодирования (т. Е. Вы не можете show
их, но должны glyphshow
их).
Так что, вероятно, лучше всего взять pathbbox
из строки всех символов, которые вы собираетесь использовать. Это будет игнорировать вклад любых других персонажей, которые могут присутствовать, но не имеют отношения к вашей цели. И не забудьте flattenpath
убрать контрольные точки из кривых (которые могут находиться далеко за пределами «реальной» ограничительной рамки).