Está en la página 1de 8

Tutorial de

PostScript
Pedro J. Morales.
version 1r0, mayo 2013
P
ostScrip es una lenguaje orientado a la ge-
neracion de gracos y textos. Fue presenta-
do por Adobe en 1985. El principal objetivo
es la descripcion de imagenes de forma indepen-
diente de los dispositivos fsicos utilizados para
representarlas. El lenguaje es interpretado y basa-
do en una pila (stack), en el mismo estilo que
los lenguajes Forth y RPL, que se utiliza en las
calculadoras HP.
1. Objetivos
PostScript es un lenguaje de programaci on basado en
pila. Requiere mucha experiencia conseguir manejarlo
con maestra. Lo que se pretende con este tutorial es
manejar los recursos basicos de tal manera que el usuario
pueda generar c odigo fuente en PostScrip mediante otro
lenguaje de programaci on en el que se desenvuelva con
mas facilidad.
Conocer el manejo basico del lenguaje PostScript.
Conocer sus recursos y sintaxis con el n de poder
construir codigo fuente en PostScript mediante
otro lenguaje de programaci on. Este procedimiento
permite combinar la potencia graca de PostScript
con los recursos de programaci on del otro lenguaje.
2. Conceptos b asicos
Device Space. Es el sistema de coordenadas del
dispositivo fsico. PostScript no lo utiliza.
User Space. Sistema de coordenadas del usuario.
Es equivalente al primer cuadrante de un sistema
de coordenadas cartesiano.
Current Transformation Matrix. Matriz de 3x3
que sirve para realizar transformaciones como
rotacion, escalado y traslacion. Es el origen de
la potencia del lenguaje PostScript.
Path. Secuencia de segmentos y curvas.
Current Path. El Path que PostScript esta crean-
do en ese momento.
Clipping Path. Path que sirve para recortar un
graco. Usualmente es un rectangulo.
Graphics State. Coleccion de valores asignados
a determinadas variables que en conjunto cons-
tituyen el estado del sistema. El estado puede
ser guardado y restaurado mediante los comandos
gsave y grestore.
Comment. Lnea de texto que comienza por el
caracter %. El comentario especial %! se considera
como una marca del codigo fuente en PostScript.
Stack. Pila. Hay varias pilas en PostScript. Las
mas importantes son la pila de operandos y la del
diccionario. La de operandos se utiliza para guardar
los argumentos; la del diccionario se utiliza para
guardar variables.
Dictionary. Un diccionario es una coleccion de
pares nombre-valor. Todas las variables y valores
se guardan en diccionarios.
P agina 1 de 8
Name. Es un identicador. No puede ser confun-
dido con un n umero. Si empieza con una barra /,
PostScript lo guarda en la pila como un operando.
Si es el nombre de un procedimiento, PostScript
lo ejecuta. Si es de otro tipo, lo copia en la pila.
Number. PostScript puede manejar enteros y
reales.
String. Secuencia de caracteres. Se pueden escribir
entre comillas o como c odigos hexadecimales entre
angulos <>. Ejemplo: ABC es <414243>.
Array. Colecci on indexada de objetos. Pueden ser
objetos de distinto tipo. Se escriben entre parente-
sis cuadrados. Ejemplo: [ 1 XX 3 ]. Array formado
por el n umero 1, el nombre XX y el n umero 3.
Procedimiento. Es una secuencia de operadores.
Sirve para denir operadores nuevos a partir de los
anteriores. Se escriben entre llaves. Ejemplo: { 2
mul } multiplica por dos el argumento del primer
nivel de la pila.
3. Programaci on en PostScript
La programacion en PostScript es muy simple: con-
siste en colocar los operandos en la pila e invocar los
procedimientos para que los procesen. Los comandos
pueden dibujar y escribir texto en el plano.
3.1. El comando def
Sirve para introducir nuevas deniciones en el dic-
cionario. Supongamos que queremos denir la variable
xx con el valor 2:
/x 2 def
Tambien se puede utilizar para denir nuevos procedi-
mientos:
/sum2 { 2 add } def
Los procedimientos invocados en la denici on son susti-
tuidos por sus valores en el momento de la ejecucion.
El codigo puede ser ejecutado mas rapidamente si la
sustitucion se hace una vez en tiempo de denicion.
Para eso se emplea el comando bind. Ejemplo:
/sum2 { 2 add } bind def
4. Comandos de dibujo
Las formas en PostScript se construyen en tres pasos:
1. Iniciar el path con el comando newpath
2. Construir la secuencia de segmentos y curvas.
3. Dibujar el path con el comando stroke o llenarlo
con el comando fill.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Trazado de un cuadrado
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: -10 -10 210 210
%%EndComments
%%EndProlog
%%Page: 1 1
/inch {72 mul} def % convierte pulgadas a puntos
newpath % inicia path
1 inch 1 inch moveto % mueve a coordenadas de inicio
2 inch 1 inch lineto % completa trazos...
2 inch 2 inch lineto
1 inch 2 inch lineto
closepath % cierra el path
stroke % lo traza
showpage % ejecuta la pagina
Figura 1: Trazado de un cuadrado.
4.1. Coordenadas relativas
El mismo dibujo utilizando coordenadas relativas
mediante el comando rlineto:
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Trazado de un cuadrado (coord. rel.)
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: -10 -10 210 210
%%EndComments
%%EndProlog
%%Page: 1 1
/inch {72 mul} def % convierte pulgadas a puntos
newpath % inicia path
P agina 2 de 8
1 inch 1 inch moveto % mueve a coordenadas de inicio
1 inch 0 inch rlineto % completa trazos...
0 inch 1 inch rlineto
-1 inch 0 inch rlineto
closepath % cierra el path
stroke % lo traza
showpage
Formas s olidas
Las formas se pueden colorear mediante el comando
fill en lugar de stroke.
4.2. Grises y anchura de trazo
El comando setgray controla la intensidad del gris.
Toma un argumento cuyo valor esta entre 0 (negro) y
1 (blanco).
El comando setlinewidth controla el grueso del
trazo. El argumento es el grosor del trazo en puntos.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Fill
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: -10 -10 210 210
%%EndComments
%%EndProlog
%%Page: 1 1
/caja {
newpath
moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
closepath
} def
0 setgray % negro
1 setlinewidth % grosor=1
0 0 caja stroke
0.5 setgray
72 0.5 mul 72 0.5 mul caja fill
0.7 setgray
10 setlinewidth
72 72 caja stroke
showpage
5. Texto
La presentacion de texto se realiza en tres pasos:
1. Determinar unas fuentes.
2. Determinar las coordenadas del punto inferior
izquierdo de situacion del texto.
3. Proporcionar el string de texto y ejecutar el co-
mando show.
Figura 2: Coloreado y control del trazo.
Las fuentes
Las fuentes en PostScript son diccionarios. No hay
ninguna diferencia entre las fuentes y cualquier clase de
gracos. Las fuentes son gracos. Las fuentes se eligen
mediante el comando findfont. El tama no se determi-
na mediante el comando scalefont. El procedimiento
para seleccionar una fuente es:
1. Tomar una fuente del diccionario y colocarla en la
pila mediante findfont.
2. Ajustar el tama no mediante scalefont.
3. Determinar la fuente activa mediante setfont.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: texto
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: -10 -10 300 70
%%EndComments
%%EndProlog
%%Page: 1 1
/AvantGarde findfont
20 scalefont % tamanno=20puntos
setfont
newpath
72 40 moveto
(PostScript tutorial) show
showpage
6. Color
Hay varios comandos para determinar el color. Aqu se
presentan dos.
El comando setrgbcolor toma tres argumentos
cuyos valores varan entre 0 y 1. Los argumentos ajustan
los niveles de rojo, verde y azul. Ejemplos:
P agina 3 de 8
PostScript tutorial
Figura 3: Texto.
1 0 0 setrgbcolor % rojo
0.5 0 0.5 setrgbcolor % amarillo oscuro
0 0 0 setrgbcolor % negro
1 1 1 setrgbcolor % blanco
Otro medio para especicar el color es el comando
setcymkcolor. Toma cuatro argumentos: cyan, yello,
magenta y black.
Ejemplo:
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Colores
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: -10 -10 160 190
%%EndComments
%%EndProlog
%%Page: 1 1
/caja {
newpath
moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
closepath
} def
1 0 0 setrgbcolor % rojo
3 setlinewidth % grosor=1
0 0 caja stroke
1 0.5 0 setrgbcolor % naranja
72 0.5 mul 72 0.5 mul caja fill
1 0 1 0.5 setcmykcolor % dar green
2 setlinewidth
72 72 caja stroke
15 155 moveto
0 0.8 0.8 setrgbcolor
/Helvetica findfont 30 scalefont setfont
(Colors) show
showpage
7. Transformaciones
La matriz de transformacion es utilizada por el
interprete de PostScript para convertir las coordenadas
de usuario en coordenadas de la impresora. Generalmen-
te, la matriz de transformacion no tiene interes para
el programador de PostScript y su uso podra causar
que el programa no funcionase correctamente. Los co-
mandos que utiliza el usuario son rotate, translate
y scale.
Colors
Figura 4: Colores.
7.1. Rotate
El comando rotate toma un operando que indica
los grados de rotacion.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Rotacion
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 0 0 300 300
%%EndComments
%%EndProlog
%%Page: 1 1
/Helvetica findfont 20 scalefont setfont
0 30 330 { % args loop FOR
newpath
gsave
dup 360 div dup 0.4 mul dup 0.2 mul setrgbcolor
150 150 moveto
rotate
( Rotations) show
grestore
} for
showpage
7.2. Translate
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Traslacion
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 0 0 300 300
%%EndComments
%%EndProlog
%%Page: 1 1
/caja {
P agina 4 de 8
Rotations




R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s
R o t a t i o n s




R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s





R
o
t
a
t
i
o
n
s
Figura 5: Rotacion.
/lx 72 def
newpath
moveto
0 lx rlineto
lx 0 rlineto
0 lx -1 mul rlineto
closepath
} def
0 setgray % negro
1 setlinewidth % grosor=1
0 1 5 {
gsave
dup 30 mul 25 add exch 30 mul 25 add translate
0 0 caja stroke
grestore
} for
showpage
7.3. Scale
El comando scale opera con los factores de escala
para los ejes x e y.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Escala
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 20 30 300 170
%%EndComments
%%EndProlog
%%Page: 1 1
/Helvetica findfont 20 scalefont setfont
1 0.5 0.3 setrgbcolor
gsave
72 72 moveto
0.3 1 scale
(Scaled Text mode 1) show
grestore
Figura 6: Translacion.
0.5 1 0.3 setrgbcolor
gsave
100 100 moveto
1 0.6 scale
(Scaled Text mode 2) show
grestore
0.1 0.6 0.7 setrgbcolor
gsave
40 130 moveto
1.2 0.2 scale
(Scaled Text mode 3) show
grestore
showpage
Scaled Text mode 1
Scaled Text mode 2
Scaled Text mode 3
Figura 7: Escala.
8. Recorte
El recorte (clipping) es una operaci on de intersecci on
entre el graco vigente y un path (el clipping path).
Solo se imprime lo que esta dentro del path.
Por defecto, el clipping path se dene como las fron-
teras de la pagina. Se puede construir un clipping path
P agina 5 de 8
personalizado mediante el comando clip. Este coman-
do tiene una restriccion importante: una vez que se
ha reducido el area de dibujo no se puede aumentar,
por lo que es conveniente utilizar clip siempre en un
contexto denido por gsave y grestore.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Clipping
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 20 30 200 170
%%EndComments
%%EndProlog
%%Page: 1 1
/Helvetica findfont 20 scalefont setfont
/caja {
newpath
moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
closepath
} def
gsave
72 72 caja
gsave % la caja no se pierde
stroke
grestore % recupera la caja
clip % establece el clipping path
60 60 moveto
1 0.5 0.3 setrgbcolor
(Clip Text 1) show
70 90 moveto
0.2 0.9 0.5 setrgbcolor
(Clip Text 2) show
50 120 moveto
0.9 0.2 0.9 setrgbcolor
(This is Clip Text 3) show
grestore
showpage
Usando un texto para recortar
La silueta de un texto puede ser utilizada para
el recorte. Esto se consigue mediante el comando
charpath cuyos argumentos son un string y un valor
booleano. Devuelve el path del string. Como siempre, es
conveniente utilizarlo en combinaci on con los comandos
gsave y grestore.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: pjm
%%Title: Clipping Text
%%CreationDate: mayo 2013
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 20 40 500 170
%%EndComments
%%EndProlog
%%Page: 1 1
Clip Text 1
Clip Text 2
This is Clip Text 3
Figura 8: Clipping.
/Helvetica findfont 60 scalefont setfont
1 setlinewidth
gsave
72 102 moveto (Text Clipping) true charpath
clip
174 72 translate
0 2 340 { % FOR
/x exch def
0.2 0 x 360 div add x 200 div setrgbcolor
x
newpath
gsave
rotate
0 0 moveto
300 0 rlineto
stroke
grestore
} for
grestore
showpage
Figura 9: Clipping Text.
9. Encapsulated PostScript
Encapsulated PostScript (EPS) es un formato espe-
cial de Adobe adecuado para describir gracos que han
de ser exportados para incluirlos en otros documentos.
Todos los gracos de este documento se han generado
en formato EPS.
P agina 6 de 8
Un documento EPS es un documento PostScript
con unos comentarios a nadidos que proporcionan infor-
macion acerca de como procesar el documento. En la
primera lnea aparece el comentario
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 20 40 500 170
%%Page: 1 1
Obligatoriamente tiene que aparecer el comentario
BoundigBox. El chero debe contener una s ola pagina.
Los comandos no pueden alterar el estado global.
BoundingBox
El comentario BoundingBox indica el tamano de
la pagina en puntos, especicado mediante las coor-
denadas de los vertices inferior izquierdo y superior
derecho.
10. Operadores b asicos de
PostScript
add num num add num
arc x-centro y-centro ang1 ang2 arc
begin dict begin Copia el dictionario en la pila.
bind procedure1 bind procedure 2 Realiza
las sustituciones de variables en tiempo de deni-
cion.
clip La imagen se interseca con el path vigente.
charpath string bool charpath Dene el path
como la silueta del texto.
closepath A nade un segmento para cerrar el path.
curveto x1 y1 x2 y2 x3 y3 curveto Dibuja
una curva de Bezier al punto (x3 y3), tomando
como controles (x2 y2) y (x3 y3).
def nombre valor def Asocia un valor a un nom-
bre. Se utiliza para denir variables y procedimien-
tos.
div num1 num2 div num3
dup obj dup obj obj
end Quita el diccionario del primer nivel de la pila
de diccionarios.
exch val1 val2 exch val2 val1
ll Cierra y colorea el path vigente.
for inical incr lmite proc for
ndfont nombre findfont font Busca un font
en el diccionario de fonts.
grestore Toma el estado graco del primer nivel
de la pila. Lo pone como vigente.
gsave Pone en la pila el actual estado graco.
El estado contiene, entre otros datos: matriz de
transformacion, path, clip path, color, font, valor
de gris.
if bool proc if
ifelse bool proc1 proc2 ifelse
index val-n ...val-0 n index val-n
...val-0 val-n
lineto x-coord y-coord lineto
moveto x-coord y-coord moveto
mul num1 num2 mul num3
newpath Inicializa el path.
pop Elimina el contenido del primer nivel de la
pila.
restore estado restore Restaura el estado de
PostScript al estado disponible en el primer nivel
de la pila, guardado mediante save.
rlineto dx dy rlineto Traza una recta con co-
ordenadas incrementales.
rmoveto dx dy rmoveto Desplazamiento incre-
mental.
rotate angulo rotate
save Guarda en la pila el estado completo de
PostScript.
scale fx fy scale
scalefont font size scalefont font
setfont font setfont
setgray valor setgray (0=negro, 1=blanco).
setlinewidth ancho setlinewidth
show string show
showpage Imprime.
stroke Traza el path vigente.
P agina 7 de 8
sub num1 num2 sub resta
translate x-coord y-coord translate

Indice
1. Objetivos 1
2. Conceptos basicos 1
3. Programacion en PostScript 2
3.1. El comando def . . . . . . . . . . . . 2
4. Comandos de dibujo 2
4.1. Coordenadas relativas . . . . . . . . . 2
4.2. Grises y anchura de trazo . . . . . . . 3
5. Texto 3
6. Color 3
7. Transformaciones 4
7.1. Rotate . . . . . . . . . . . . . . . . . . 4
7.2. Translate . . . . . . . . . . . . . . . . . 4
7.3. Scale . . . . . . . . . . . . . . . . . . 5
8. Recorte 5
9. Encapsulated PostScript 6
10. Operadores basicos de PostScript 7
P agina 8 de 8

También podría gustarte