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


   http://www.ref-wiki.com/home/159/32080-low-side-float-lsf.html               


Кодирование шрифта



Кодирование шрифта

Каждый словарь шрифта содержит описание символов в соответствии с некоторой кодовой таблицей, в частности это может быть ASCII. Таким образом каждый символ имеет свой цифровой код -- число от 0 до 255. Кодовая таблица не является постоянной, ее можно изменять из приложения.

Коды символов можно использовать двумя способами:

- их можно с помощью оператора put вставлять в строку;

- или непосредственно использовать в строке в виде восьмеричных чисел.

Многие шрифты имеют символы не входящие в стандартную кодировку и кроме того, часто такие символы отсутствуют на клавиатуре. Чтобы посмотреть как кодируются символы того или иного шрифта, напишем программу, которая распечатывает кодовую таблицу любого заданного шрифта.

/Helvetica findfont 12 scalefont setfont

/cod 3 string def

/char 1 string def

/newline

{currentpoint 13 sub

exch pop LM

exch moveto }def

/prtnum % в стеке код

{cod cvs show}def

/prtchar %в стеке код

{char 3 - 1 0 roll put

char show}def

/prtall

{dup prtnum () show

prtchar newline} def

% основная программа.

/LM 72 def

LM 450 moveto

12 1 60 {prtall} for

/LM 144 def

LM 144 moveto

6 1 100 {prtall} for

showpage

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

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

Операторы translate, rotate и scale для модификации координат пространства пользователя изменяет соответствующие элементы этой матрицы.

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

Чтобы изменить масштаб шрифта по х и по у, нужно задать соответственно значения чисел m и n в матрице

[m 0 0 n 0 0 ]

Так строки

/Helvetica findfont 6 scalefont

/Helvetica findfont [6 0 0 6 0 0] makefont

выполняют ровно одно и тоже: создают шрифт Helvetica размером 6 пунктов. Действие оператора makefont однако значительтно шире, чем у scalefont. Он позволяет как угодно сжимать и растягивать текст. Следующая прграмма из “Голубой книги” показывает технику работы с makefont.

/basefont /Helvetica findfont def

/LM 72 def

/newline

{currentpoint 13 sub

exch pop LM

exch moveto} def

% основная программа

LM 400 moveto

% обычная печать

basefont [12 0 0 12 0 0] makefont setfont

(Пример нормальной печати) show newline

% растянутый.

basefont [17 0 0 12 0 0] makefont setfont

(Растянутый шрифт) show newline

% сжатый

basefont [7 0 0 12 0 0] makefont setfont

(Сжатый шрифт) show newline

% наклонный

basefont [12 0 6.93 12 0 0] makefont

setfont

(Italic) show

showpage

<рис. файл p4_4.ps>

Программа печатает четыре строки, каждый раз преобразуя текущий шрифт, с помощью различных матриц шрифта. Во второй и третьей строке изменялся масштаб по горизонтали (Вы можете поэксперементировать, задавая различный масштаб и по вертикали, но не забудьте поменять константу в процедуре newline, чтобы строки не наползали одна на другую). Интересна последняя строка. Третье число в матрице 6.93 представляет собой результат умножения у на tg 30 градусов. Таким образом задан наклон шрифта.

Вы можете поэкспериментировать с матрицами преобразования, чтобы лучше почувствовать, что происходит с шрифтом.

Все эти преобразования пространства пользователя можно выполнить также с помощью операторов scale и setmatrix. Однако в отличие от makefont их действие распространяется на все, что печатается на текущей странице. Если нужно сжать, растянуть или наклонить текст, то следует пользоваться только makefont.



Содержание  Назад  Вперед






Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий