当前位置: 首页 > 工具软件 > C Script > 使用案例 >

PostScript基本语法

荣轶
2023-12-01

一、基本语法

以换行符作为语句的分隔符
以空格作为参数和符号的分隔符
以’%’作为注释行开始的标志
所有字符均使用ansi编码
拓展名’ps’/’eps’
采用操作数在前,操作符在后的结构。有多组操作数时从右往左按堆栈顺序
方括号表示数组。
圆括号表示字符串。

二、基本画图命令

PostScript采用的坐标系以左下角为原点,水平向右为x轴正方向,水平向左为y轴正方向。
pt是PostScript里的基本长度单位,1英寸为72pt,相当于屏幕的96个像素。因此,可以认为3个pt和4个像素大小相当。
PostScript通常情况下默认的页面大小是A4大小。

setlinewidth (width)

设置线宽(默认为1)

setrgbcolor (r, g, b)

设置颜色(默认为0,0为黑,1为白)

setgray (gray)

设置灰度

moveto (x,y)

移动到

lineto (x,y)

由所在点构造线段路径到(x, y)

arc (x, y, r, arc1, arc2)

构造以(x, y)为圆心,以r为半径,半径辐角从arc1到辐角arc2的圆弧路径

curveto (x1, y1, x2, y2, x3, y3, x4, y4)

以当前位置开始,(x1, y1)为起点, (x2, y2)和(x3, y3)为控制点, (x4,  y4)为终点,构造三次Bezier曲线路径
(x1, y1)可省略,此时默认为当前笔刷所在位置

rlineto (x, y)

由所在点构造线段路径到相对坐标

rcurveto (x1, y1, x2, y2, x3, y3, x4, y4)

以当前位置开始,(x1, y1)为起点, (x2, y2)和(x3, y3)为控制点, (x4,  y4)为终点,相对坐标构造三次Bezier曲线路径
(x1, y1)可省略,此时默认为当前笔刷所在位置

stroke ()

用当前的线宽和颜色

setlinecap (status)

设置线的末端形状(默认为1,矩形末端;2为圆形末端)

setlinejoin (status)

设置线的连接的形状(默认为1,矩形连接;2为圆形连接)

fill ()

以当前颜色填充闭合路径

newpath ()

开始一段闭合路径

closepath ()

结束闭合路径

setpagedevice ()

改变页面大小
例: <</PageSize [400 300]>> setpagedevice

三、坐标变换命令

gsave ()

在变换前,保存当前的坐标系

grestore ()

在画完变换后下坐标系的图形后,恢复当前坐标系

translate (x, y)

后面所画的图形都向右平移xpt,向上平移ypt

rotate (angle)

后面所画的图形都以(0, 0)点为轴心逆时针旋转角度angle

scale (s1, s2)

后面所画的图形都在x方向上变为原来的s1倍,在y方向上变为原来的s2倍

concat ([a, b, c, d, e, f])

后面所画的图形上的点都以下面的变换的值确定新位置:

四、显示字体

Post Script支持英文字母,希腊字母和数学公式。
所有数学公式的符号都是由ascii码表示。

findfont (font)

设置字体,参数为/Times(用来显示TimeNewRoman英文字体)或者/Symbol(用来显示希腊字母)。

scalefont (num)

设置字体大小

setfont ()

选中刚刚设置的字体

show ()

显示字体

例如,在画图区的左右角用16号字Times new roman显示字符串”Post Script”可以表达为:

/Times findfont
16 scalefont
setfont
0 8 moveto
(Post Script) show

五、颜色渐变

在Postscript语言里,颜色渐变用填充模板(Shading Pattern)实现。
颜色渐变填充模板有很多种。其中三角形网格是最简单的,也是用起来最方便的。

Shading Pattern用双书名号(<<>>)建立结构体。
定义宏替换可以使用反斜杠加宏名最后以def结束。

例如要画一条竖直的彩虹颜色条,可以这样定义竖直颜色填充模板:

/VerticalColorBar
<<
/PatternType 2
/Shading
<<
/ShadingType 5
/ColorSpace /DeviceRGB
/VerticesPerRow 2
/DataSource
[
0 80.5 0 0
1 80.5 0 0
0 71 0 0
1 71 0 0
0 51 1 0
1 51 1 0
0 30 1 1
1 30 1 1
0 10 0 1
1 10 0 1
0 00 0 0.5
1 00 0 0.5
]
>>
>>def

其中VerticalColorBar是宏名,前面加反斜杠表示这是个宏定义,后面用def表示宏定义结束。下面用这个宏定义画一个竖直矩形:

newpath
10 10 moveto
60 10 lineto
60 410 lineto
10 410 lineto
closepath
VerticalColorBar [10 0 0 50 10 10] makepattern
setpattern
fill

需要注意的是,在makepattern前面要有个矩阵,因为前面定义的填充模板不一定正好在所要填充的模板上。
即使所定义的填充模板与所要填充的区域正好重合,还是需要在makepattern前加一个单位矩阵,因为这是makepattern必须有的参数。
通过矩阵,还可以实现对填充模板的变换。例如,想要把前面的模板做成一行彩色字的填充,可以使用下面的代码

/Times findfont 32 scalefont setfont
0 16 moveto
VerticalColorBar [0 48 -24 0 192 0] makepattern
setpattern
(Hello World!) show

上面的代码相当于把定义的填充模板逆时针旋转了90度,因此可以看出把“上红下蓝”的填充模板变成了“左红右蓝”的字体填充。

参考资料:

https://baike.baidu.com/item/PostScript/2192822
 类似资料: