PostScript——PostScript语言教程

转载自:https://www.cnblogs.com/Ansing/tag/PostScript%E8%AF%AD%E8%A8%80%E6%95%99%E7%A8%8B/

 

一、介绍

 

POSTSCRIPT语言是打印机页面魔术的一种程序设计语言。他拥有着广泛的图形操作,并且可以以任意方式,包含变量,函数,以及过程的任意组合。

POSTSCRIPT页面描述是由解析器运行的程序(gs),postscript程序通常是由其他应用程序生成的。

1.1、POSTSCRIPT作为页面语言

POSTSCRIPT具有大量的图形运算符,通过他可以更加详细的描述你的页面。

文本的字体,位置,方向,尺寸。
几何图形的大小,方向,宽度,直线和曲线的位置,任何大小形状颜色的空间填充。

1.2、POSTSCRIPT作为编程语言

 


二、堆栈和运算

POSTSCRIPT 编程语言和其他编程语言一样,适用于各种各样的数据,例如数字,数组,字符串,以及字符。这种处理数据的方法被称为POSTSCRIPT对象。
操作数据的方法有多种多样,例如:将数据放入变量名,通过变量名称进行处理。POSTSCRRIPT语言拥有变量,但也可以通过堆栈直接操作数据。

2.1、POSTSCRIPT堆栈

堆栈是一段用于处理数据的内存,是一种先入后出的存储原理。

将数字入栈: 12 6.3 -99 
说明:

1.将12入栈
2.将6.3,入栈,12压栈
3.将-99 入栈,前两个一次类推

 

2.2、运算

运算 代码示例 结果
 5 27 add  32
 8.3 6.6 sub  1.7
 13 8 div  1.625
除返回整数  25 3 idiv  8
除返回余数  12 10 mod  2
 6 8 mul  48
取反  -27 neg  27

 

组合运算:

6 + (3 ÷ 8)
1. 3 8 div 6 add
将3,8入栈,除运算,0.375,再讲6 入栈,加运算,得6.375
2. 6 3 8 div add
将6,3,8,入栈,8为栈顶,取3,8,进行除运算,结果再与6 进行加运算


8 - (7 × 3)
1. 7 3 mul 8 exch sub
2. 8 7 3 mul sub

exch:交换栈的前两项空间数据

清除所有栈数据: 6 8 12 32 clear => 空
复制堆栈顶部的数据: 6 dup => 6 6
删除堆栈顶部数据: 17 8 pop => 17
旋转数据: 7 8 9 3 1 roll => 9 7 8 : 789依次入栈,1代表从顶到底,798,978
7 8 9 3 -1 roll => 897 : -1代表从低端到顶端,879, 897

2.3、交互运算符
== 将堆栈顶端的数据打印出来,并且删除。
pstack 将整个栈中的数据打印数来,保留数据。

 


三、绘图

3.1、画线

线:

newpath
144 72 moveto
144 432 lineto
stroke
showpage

说明:

我们首先调用newpath,初始化当画笔状态。

x y moveto,将画笔的移动到x,y的位置
x y lineto,以x,y为终点进行画线
stroke将构建的路径绘制到当前页面
showpage打印当前页

交叉线:

复制代码
newpath
72 360 moveto
144 72 rlineto
144 432 moveto
0 -246 rlineto
storke
showpage
复制代码

说明:

x y rlineto:将画笔位以x,y进行位移

 

正方形:

复制代码
newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
4 setlinewidth
stroke showpage
复制代码

说明:

setlinewidth:设置线的宽度

复制代码
newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
4 setlinewidth
stroke showpage
复制代码

closepath:使图形闭合(不使用的时候在拐角的地方会出现一个小缺口)


3.2、填充图形

复制代码
newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
fill showpage  
复制代码

fill:填充图形

复制代码
newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
.5 setgray
fill showpage
复制代码
 

gray:设置透明度

多图的叠层:

复制代码
newpath
    252 324 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
    -72 0 rlineto
closepath
.5 setgray
fill showpage
 
newpath
    270 360 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
    -72 0 rlineto
closepath
.5 setgray
fill showpage
 
newpath
    288 396 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
    -72 0 rlineto
closepath
.5 setgray
fill showpage
复制代码

  

3.3、总结

closepath 闭合图形
lineto 绘制直线
moveto 设置绘制的起始点
newpath 初始化绘制方式
rlineto 移动
fill 绘制填充图形
setgray 设置透明度
setlinewidth 设置线的宽度
stoke 绘制路径
showpage 打印当前页

 


四、程序变量使用

4.1、变量定义
POSTSCRIPT 变量
变量的定义是将变量名和值用def进行关联类似:

/ppi 75 def   %将ppi定义为75
/ppi ppi 1 add def  %将ppi + 1的值定义为ppi ppi = 75 + 1 = 86

POSTSCRIPT 程序块:

/inch {72 mul} def

 

4.2、使用程序和变量


方块:

复制代码
/box
{
72 0 rlineto
0 72 rlineto
-72 0 rlineto
closepath
}def
 
newpath
252 324 moveto box
.4 setgray fill
复制代码

 

复制代码
/inch {72 mul}def
 
/box
{
newpath moveto
1 inch 0 rlineto
0 1 inch rlineto
-1 inch 0 rlineto
closepath
}def
 
/fillbox
{
setgray fill
}def
 
3.5 inch 4.5 inch box
0 fillbox
2.75 inch 5 inch box
.4 fillbox
复制代码

 


五、文本打印

5.1、POSTSCRIPT字体

字体是具有统一规格的字符集。其中包含数百个字符集,包含熟悉的TIMES和HELVETICA

使用POSTSCRIPT字体
在你打印文本之前,你需要指定所需的字体,这个过程需要三个步骤:

  1. 查找字体的信息。保存在当前环境中,他用来提供特定字体的形状,信息。
  2. 将字体缩放。
  3. 将缩放的额字体设置为当前字体,然后打印出来
复制代码
%!PS-Adobe-3.0
 
/Times-Roman findfont 15 scalefont setfont
 
72 200 moveto (typography) show
 
showpage
复制代码

 

/Times-Roman findfont

查找名称为Times-Roman的字体,并把它保存到当前程序中

15 scalefont
设置字体大小为15号的Times-Roman字体

setfont
根据已经保存好的规格,对字体进行设置

 

5.2、动态设置字体大小

复制代码
%!PS-Adobe-3.0
 
/scaleTimes % stack:scale
{
/Times-Roman findfont
each scalefont setfont
}def
 
6 scaleTimes
72 200 moveto (typography) show
showpage
复制代码

 

/Times-Roman findfont 入栈

each scalefont setfont 入栈

6 scaleTimes意义为
6 /Times-Roman findfont each scalefont setfont
each 将 6 和 /Times-Roman 交换位置得
/Times-Roman findfont 6 scalefont setfont

默认支持的字体字体:
Times-Roman
Times-Bold
Times-Italic
Times-Boldltalic
Helvetica
Helvetica-Bold
Helvetica-Oblique
Helvetica-Boldltalic
Courier
Courier-Bold
Courier-Oblique
Courier-BoldOblique

复制代码
%!PS-Adobe-3.0
 
/MainFont
    /STSong-Light--GB-EUC-H findfont 15 scalefont def
/SloganFont
    /Helvetica-Oblique findfont 7 scalefont def
/OwnerFont
    /Helvetica  findfont 10 scalefont def
 
/rightshow
{
    dup stringwidth pop
    150 exch sub
    0 rmoveto
    show
}def
 
/CardOutline
{
    newpath
    90 90 moveto
    0 144 rlineto
    252 0 rlineto
    0 -144 rlineto
    closepath
    .5 setlinewidth
    stroke
}def
 
/doBorder
{
    99 99 moveto
    0 126 rlineto
    234 0 rlineto
    0 -126 rlineto
    closepath
    2 setlinewidth
    stroke
}def
 
/Diamond
{
    newpath
    207 216 moveto
    36 -54 rlineto
    -36 -54 rlineto
    -36 54 rlineto
    closepath
    .8 setgray
    fill
}def
 
/doText
{
    0 setgray
    90 180 moveto
    MainFont setfont
    (AAA丶死刘) rightshow
 
    90 168 moveto
    SloganFont setfont
    ("The Club of Lonely Hearts") rightshow
 
 
    216 126 moveto
    OwnerFont setfont
    (Sam Spade) show
 
    216 111 moveto
    (Owner) show
}def
 
 
CardOutline
doBorder
Diamond
doText
 
showpage
复制代码

 

/STSong-Light--GB-EUC-H 为中文打印(注:中文打印时候要求文件格式为gb2312,否则字库不识别,打印出来是乱码)

stringwidth 获取当前字符串的宽度,寄存起为字符串宽度 ,字符串内容,宽度在顶端

dup stringwidth pop 
150 exch sub 
0 rmoveto
show


意义为:
  获取字符串宽度,并将(150 - 字符串宽度的值,0)进行偏移,即:打印字符串在150处右端对齐。

posted @ 2019-12-26 15:15  飞行的轻羽  阅读(1317)  评论(0编辑  收藏  举报