Семь уроков по PostScript

         

PostScript-шрифты



PostScript-шрифты

Шрифт - это набор символов, имеющих единый дизайн. Дизайн конкретного шрифта называется гарнитурой. Набор гарнитур, разработанных для совместного использования, называется семейством гарнитур. Наиболее популярные гарнитуры: Таймс, Курьер, Журнальная и др.

Конкретный PostScript-шрифт является реализацией начертания некоторого семейства гарнитур. PostScript-шрифты относятся к классу векторных и, следовательно, масштабируемых шрифтов. Существующие методы описания векторных шрифтов позволяют автоматически менять размер шрифта (кегель) с минимальными искажениями его начертания при преобразовании размера.

Чтобы задать шрифт, нужно выполнить следующие действия:

- найти описание шрифта в словаре шрифтов. Это описание позволяет построить контуры каждого отдельного символа. Подробнее об этом словаре будет рассказано несколько позже;

- отмасштабировать шрифт до нужного размера. Его размер задается минимальным расстоянием по вертикали между строками текста, необходимым, чтобы эти строки не накладывались одна на другую, например обычный шрифт часто задается высотой в 12 пунктов (напомним, что 1 пункт = 1/72 дюйма);

- установить отмасштабированный шрифт в качестве текущего шрифта, которым и будет печататься текст.

Чтобы посмотреть, как это работает, давайте напечатаем слова PC Week шрифтом Helvetica размером 14 пунктов.

/Helvetica findfont

14 scalefont

setfont

100 150 moveto

(PC Week) show

showpage

В этом фрагменте используется ряд новых операторов. В первой строке в стек сначала помещается литерал с именем шрифта, а затем вызывается оператор findfont. Этот оператор ищет это имя в словаре с названием FontDictionary и помещает соответствующий словарь шрифта в стек. Данный словарь содержит описания образов символов для шрифта размером в один пункт. Нужный размер устанавливается с помощью оператора scalefont, который берет из стека число и словарь шрифта и возвращает в стек словарь шрифта модифицированный под нужный размер. Так, в нашем примере строка

14 scalefont



вернет в стек словарь для шрифта Helvetica с кеглем 14 пунктов. Наконец, оператор setfont переводит словарь шрифта из стека в текущий шрифт, который и будет использован для печати текста. Чтобы что-либо напечатать, нужно установить местоположение текущей точки, поместить в стек заключенную в круглые скобки строку и вызвать оператор show. Этот оператор "печатает" строку из стека на текущей странице, начиная с текущей точки. По мере печати текущая точка перемещается в конец строки.

Изменение размера шрифта при печати

Следующий пример показывает, как во время печати текста можно менять шрифт. Определим процедуру устанавливающую шрифт нужного размера.

/newsize % в стеке размер

{ scalefont setfont} def

/ getfont

{ Helvetica findfont} def

getfont 8 newsize

72 250 moveto (example) show

getfont 10 newsize

72 275 moveto (example) show

getfont 12 newsize

72 300 moveto (example) show

showpage

Эта программа напечатает три раза слово example шрифтом разного размера. Процедуры newsize и getfont можно объединить, если учесть порядок следования аргументов в стеке. (Понятно, что в нем хранится не сам словарь шрифта непосредственно, а ссылка на него).

/scaleHelv %в стеке размер

{/ Helvetica findfont

exch scalefont % кегель в стеке

setfont } def

Теперь запись строки программы станет еще компактней:

6 scaleHelv



Содержание раздела