PostScript语言.docx

上传人:b****2 文档编号:659699 上传时间:2023-04-29 格式:DOCX 页数:16 大小:28.15KB
下载 相关 举报
PostScript语言.docx_第1页
第1页 / 共16页
PostScript语言.docx_第2页
第2页 / 共16页
PostScript语言.docx_第3页
第3页 / 共16页
PostScript语言.docx_第4页
第4页 / 共16页
PostScript语言.docx_第5页
第5页 / 共16页
PostScript语言.docx_第6页
第6页 / 共16页
PostScript语言.docx_第7页
第7页 / 共16页
PostScript语言.docx_第8页
第8页 / 共16页
PostScript语言.docx_第9页
第9页 / 共16页
PostScript语言.docx_第10页
第10页 / 共16页
PostScript语言.docx_第11页
第11页 / 共16页
PostScript语言.docx_第12页
第12页 / 共16页
PostScript语言.docx_第13页
第13页 / 共16页
PostScript语言.docx_第14页
第14页 / 共16页
PostScript语言.docx_第15页
第15页 / 共16页
PostScript语言.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

PostScript语言.docx

《PostScript语言.docx》由会员分享,可在线阅读,更多相关《PostScript语言.docx(16页珍藏版)》请在冰点文库上搜索。

PostScript语言.docx

PostScript语言

一、概述

PostScript语言是Adobe公司设计用于向任何支持PostScript语言的打印机打印文件的页面描述语言。

Postscript既是一种页面描述语言,也是一种高级解释型脚本语言。

由于它与设备的无关性,使得它无论在那种平台上,都能忠实的再现原貌,从而被广泛应用于打印出版行业,同时由于它是一种解释型脚本,所以它也可以像一般编程语言一样用来解决某些问题。

PS语言一方面是一个具有较强图形功能的通用程序设计语言,另一方面它又是一个具有一般程序设计特性的页面描述语言,因此它具有两者的特点:

1.PS语言具有通用程序设计语言中的一些基本结构,如各种类型的数据、数组、字符串、控制语句、条件语言和过程等,它还包含有其它语言中一般不常用的名字(name)、词典(dictionary)等。

2.具有较强的图形功能

·它能构成由直线、弧以及三次曲线所组成的任何形状的图形;填充原语允许图形外轮廓线是任意形状和粗细;裁剪路径也可以是任意形状。

·文字和图形结合成一体,也就是说PS语言在图形模式下文字也作为图形来处理,PS中任何图形操作均适用于文字。

·在通用坐标系中,PS支持由平移、变比、旋转、反射和扭斜等线性变换所组成的复合变换,且这些变换适用于页面描述语言中的所有元素:

文字、图形和图像。

二、通用程序设计语言

PostScript语言具有通用程序设计语言的特性。

字符“%”用来在PostScript程序中表示注释。

作为一个通用的约定,每个PostScript都以字符“%!

”开始,这样所有的设备都会将它解释为PostScript。

1.后缀表示法

PS语言的语句采用后缀表示法,即在一个语句中,操作数在前,而相应的操作符在后,如:

4060add2div

200300moveto

072relineto

第一条语句表示40和60相加后再除以2得50,第二、三条语句表示把现行点移到(200,300)后,再沿垂直方向画一条长度为72的直线。

例如:

34add51submul

将执行(3+4)×(5-1)这样的计算。

详细分析:

3和4都是符号,它们将自己放到堆栈中,在这两个命令之后,堆栈将变成这样:

4

3

add是一个运算符,它将堆栈中最上面的两个元素取出(在我们的例子中是3和4)、将它们相加、然后将结果放到堆栈上:

7

下面又是两个符号,它们将把堆栈变成这样(需要注意的是操作仅仅局限在堆栈顶部,下面的元素不受影响):

1

5

7

另外一个运算符sub,从堆栈顶取出两个元素、第二个减去第一个、然后将结果放到堆栈:

4

7

mul同其他两个运算符一样,从堆栈取出两个元素、将它们的乘积放到堆栈:

28

2.程序结构

PS程序由两部分组成:

序言(prologue)和正文(script)。

序言中包含了正文中所用的过程定义和数值定义;而正文由PS操作符和序言中定义的过程所组成。

简单用例子加以说明,下面这段程序是在页面的不同位置上画几个正方形,且用不同的灰度进行填充。

在序言中定义了绘制正方形的过程box,而在正文中逐一对box进行调用:

%Defineboxprocedure

/box

{720relineto

072relineto

-720relineto

closepath}def

%Beginprogram

newpath%firstbox

200300movetobox

0setgrayfill

newpath

200400movetobox%secondbox

4setgrayfill

showpage

3.数据类型和对象

PS语言中可访问的数据称为对象(0bject),对象可以由PS操作符来产生、管理或撤销。

每一个对象有类型、属性、以及相应值。

PS管理的对象类型有:

integeroperator

realfile

booleanmark

arraynull

stringsave

namefontID

dictionary

下面对有关类型的对象进行简单的说明。

(1)integer和real(整数和实数)

如123-98-0.002

8#177716#FFFE2#100%它们分别表示8进制、16进制和2进制数据。

(2)array(数组)

一维对象的集合。

数组元素可以是不同类型的对象,如数字、字符串、或其它数组。

如[123/abc(xyz)]

该数组元素包含了数字123,name对象“abc”和string对象(xyz)。

(3)string(字符串)

由括号()给出的一串字符,如(Thisisstring)。

(4)name(名字)

一些有关字符的集合,类似于其它语言中的标识符。

如abcoffset@pattern/box等。

(5)dictionary(词典)

是由一对对PS对象组成的元素表,表中第一元素为key,第二元素为value。

词典有系统词典和用户词典两大类。

(6)mark(标记)

是一个用来标记操作数堆栈位置的特殊对象。

(7)save

用于保存PS存贮器某一瞬问状态。

(8)fontlD(字库标识)

用于构造PS字库(font)的一个特殊对象。

对象的属性可以分成可执行(executable)和不可执行(或称文字性—litera1)两大类。

4.语句

(1)条件控制(if,ifelse)

比较运算式

符号

大于

gt

大于等于

ge

小于

lt

小于等于

le

等于

eq

不等于

ne

if语句:

格式:

条件{op1}if

条件如果为true则作大括号内的动作。

ifelse语句:

格式:

条件{op1}{op2}ifelse

如果条件成立,执行{op1},否则执行{op2}。

例如:

如果2>1印出greate

21gt{(greate)}if

如果2>1印出greate否则印出little

21gt{(greate)}{(little)}if

(2)循环控制(for,repeat,loop,exit)

for语句:

格式:

起始值间隔结尾值{事件}for

例如:

1240300{750moveto(test)show}for

12750moveto(test)show

52750moveto(test)show

……

292750moveto(test)show

repeat语句:

格式:

执行次数{事件}repeat

loop语句:

{事件}loop

5.操作符

操作符对象是表示一个PS内部动作。

大多数操作符与系统词典中的name有关,name是关键字,而值就是操作符本身。

当PS解释器执行其中某一个name时,它就在词典堆栈中上、下查找name并执行它,从而完成指定的内部动作。

格式:

operand1operand2……operandnoperatorresult1result2……resultm前面为n个操作,紧跟着为相应的操作符,得到m个结果。

分类:

PS共提供了240多个内部操作符,它们大致可分为:

堆栈操作符;算术和数学运算操作符;数组、词典和串操作符;关系,布尔和按位运算操作符;控制操作符;类型、属性和转换操作符;文件操作符;虚拟存贮器操作符;以及PS语言中比较重要的文字、图形和图象操作符

PS的特点之一是还可以由用户自定义新的操作符。

6.堆栈

PS是一种栈式语言,它通过堆栈来直接访问数据,PS解释器管理4种不同类型且相互完全独立的堆栈:

·操作数(operand)堆栈:

保存PS操作数和操作结果。

·词典(dictionary)堆栈:

仅用于保存词典对象。

解释器遇到可执行名字时,去查找当前字典堆栈。

如果名字已经定义,则去执行相应的操作;如果名字未定义,则给出错信息。

·执行(execution)堆栈:

保存可执行的对象(fileorprocedure)。

当解释器中断目前所运行的一个对象转去执行其它程序对,PS则把暂停的对象推入“执行堆栈”。

中断处理完成以后,则弹出被中断了的对象继续执行。

·图形状态(graphicsstate)堆栈:

保存或恢复与图形操作有关的信息,如彩色、路径、位置、画图参数、坐标变换矩阵、以及字库信息等。

PostScript有几个操作符用于重组或者控制堆栈:

复制(dup)、丢弃(pop)和交换(exch)在堆栈顶部进行操作,然而roll旋转堆栈中的某一部分,copy复制某个特定的部分,index允许像数组那样访问堆栈。

三、页面描述语言

作为页面描述语言PS提供了一组精确描述所需页面的图形操作符,它们适用于三种类型的对象:

图形、文字和图像。

1.PS成像模型(imagemodel)

成像模型是指在设计图形系统对使用的一组规则,PS成像模型不再采用惯用的像素(pixe1)操作,而是采用模板(stencia1)/着色(paint)技术,即PS认为图像是通过墨水(ink)喷洒到页面上模板指定的区域而构成的,模板可以是由字母、线、填充区域、或半色调照片等图元组成,而墨水可以是各种颜色或任意灰度。

一旦在页面上由各种模板构成了用户所希望的格式,就可以在任意光栅设备上输出。

在实现PS成像模型时,以下三个基本概念非常重要。

·当前页面

是指PS用于画图的“理想页面”,它与所使用的打印机功能无关。

·当前路径

由一组相连或不相连的用于描述几何图形的形状和位置的点、线和曲线组成。

当前路径所定义的几何形状不受限制,打印机的分辨率也不影响路径的定义。

·裁剪路径

是一个可以在其内部画图的区域边界。

裁剪路径可以是任意形状,其缺省值为打印纸的大小。

2.坐标系

PS在用户空间进行画图操作,其结果将自动地转换成指定设备坐标进行打印输出。

因此,画图坐标系独立于所用设备。

缺省的用户坐标其原点在左下角,单位1/72吋。

PS语言可以用三种方法来改变PS用户空间:

平移、变比和旋转变换

translate:

平移坐标

xytranslate%平移(x,y)距离

scale:

缩放

xyscale%水平方向缩放x倍,垂直方向缩放y倍

rotate:

旋转

anglerotate%旋转angle度,角度如果是正值是反时针方向旋转,负值则为顺时针方向旋转

3.图形操作

PS语言提供了六组图形操作符。

(1)图形状态操作符

图形状态是一组当前图形控制参数。

图形状态本身不是对象,但可以通过相应操作进行读出或修改。

·保存(gsave)、恢复(grestore)以及初始化(initgraphics)图形状态。

·设置线宽(setiinewidth)、线型(setdash)、以及线末端的形状(setlinecap)。

·指定两线段相交的方式(setlinejoin)。

·指定线的颜色(setrgbcolor,sethsbcolor)或灰度值(setgray)。

(2)坐标系和矩阵操作符

PS画图操作将通过当前变换矩阵CTM自动地把用户坐标转换成设备坐标,因此这类操作符主要用于CTM的管理,包括:

·置恒等矩阵(matrix),初始化(initmatrix)、用matrix取代CTM(setmetrix)等。

·平移(translate)、变比(scale)、旋转(rotate)以及求复合变换矩阵(concatmatrix)等。

·坐标变换(transform,itransform)。

(3)路径构造操作符

路径(path)定义了各种图形的形状(shapes)或轨迹(trajectories)或范围(regious),具体指画线、填充区的边界(boundary)或裁剪的模板(termplate)。

路径操作有:

·改变当前路径(newpath),移动现行点(moveto)。

·路径中增加直线或曲线:

画线(1ineto),画弧/画圆/椭圆(arc),贝齐曲线(curveto)等。

·路径闭合(closepath)。

·置裁剪路径(clippath)。

所有这些操作均使用用户坐标,由CTM转换成设备坐标。

(4)着色操作符

在构造一个图形路径并设置了图形状态中的彩色、线宽、字体等参数以后,通过着色(paint)操作符对图形状态和路径进行扫描转换,并在光栅设备上进行输出。

具体操作有填充(fil1)、绘制路径(stroke)、图像操作(image,imagemask)等。

(5)设备的设置和输出操作符

该类操作符用来建立光栅存贮器与物理输出设备之间的关系。

一旦一个页面已在光栅存贮器中被完全描述,那么执行图形输出操作符(showpage,copypage)就可以将页面描述传送到打印机进行输出。

(6)画图

步骤如下:

1).定义path(图径)(newpath)

2).移到指定的位置(moveto,rmoveto)

3).使用不同画图工具(arcto,lineto,curvto,rlineto,rarcto,rcurvto)

4).定义线宽及颜色(setlinewidth,setrgbcolor,setgray)

5).画图(fill,eofill,stroke,如果是fill请注意必须是一个封闭的path)

(7)实例分析

在生成图形的时候,PostScript使用普通的笛卡尔坐标系。

100200moveto300400linetostroke

将“光标”移到坐标点(100,200)然后画线到(300,400)。

5070moveto1002005080100100curvetostroke

生成一个从(50,70)到(100,100)的立方贝塞尔曲线,控制点是(100,200)和(50,80)。

250250moveto(Wikipedia)show

在位置(250,250)使用预先选择的字体画出文本“Wikipedia”,字体选择可以使用例如/Courierfindfont12scalefontsetfont这样的命令串。

图形最初在“用户坐标系”中创建,在复制到确定最后输出的“设备坐标系”之前它们可以进行旋转、缩放或者扭曲等变换。

200300translate45rotate

将用户坐标系中的内容上移200点、右移300点并且复制到设备坐标系时旋转45度。

4.处理过程定义

{和}提供了一些编程的工具。

{将解释器切换到延迟运行模式,所有的东西甚至是运算符和其他的可执行对象都放到堆栈中,其中一个例外就是},它将堆栈中从{开始的所有内容,绑定成一个(匿名)处理过程,然后将它放到堆栈上。

这种结构有几种不同的用途,如子程序定义(匿名程序赋给一个变量)、循环、条件等等:

x10eq{0}{1x1div}ifelse

这段代码首先使用eq测试x1是否是0;根据结果的不同将真或者假放到堆栈上。

在此之后,将两个过程放到堆栈上,然后执行ifelse,它从堆栈中取出三个参数,如果第三个参数是真就执行第二个否则就执行第一个。

即,如果x1是0结果就是0,其他情况结果就是1/x1。

四、PS文件的常用档头

第一行给出版本,如果没有给也可以但是最好是给出版本。

%!

PS-Adobe-3.0

其它:

%!

PS-Adobe-3.0

%%Title:

(Untitled2)

抬头

%%Creator:

(MicrosoftWord:

LaserWriter88.4.2)

建立程序

%%CreationDate:

(3:

40PMFriday,May9,1997)

建立日期

%%For:

(dubois)

作者

%%Routing:

(mailto:

\000dubois@primate.wisc.edu)

%%Pages:

168

总页数

%%PageOrder:

Ascend

页面排方式

%%Orientation:

Portrait

横向或直向

%%DocumentMedia:

Default6127920()()

页面大小

%%EndComments

结束注解

五、外部链接

PostScript语言手册第三版

PostScript语言教程与手册

PostScript入门导引

六、具体问题的解决

1.用PS语言如何在位置(x,y)处打上一个黑点

%在5051(单位为1/72英寸)处打一黑点,大小为1/72英寸,0.35mm

newpath

5050moveto

5051lineto

closepath

stroke

showpage

2.用PS语言写循环语句

循环语句(for,repeat,loop,exit)

for语句:

格式:

起始值间隔结尾值{事件}for

例如:

1240300{750moveto(test)show}for

12750moveto(test)show

52750moveto(test)show

……

292750moveto(test)show

repeat语句:

格式:

执行次数{事件}repeat

loop语句:

{事件}loop

3.用PS语言如何建一个宽度是M,高度是N的图像

在PS语言中关于光栅图形的操作符是image。

image操作符比较复杂,它有五个参数。

格式:

widthheightdepthmatrixdataimage

width和height:

以像素的形式定义图像矩阵的大小和形状

depth:

每个像素所占的位数

matrix:

由单位矩形映射到图像像素坐标的转换矩阵

data:

以十六进制形式表示的图像数据

例:

%Asimplesmileyface

%!

PS-Adobe-3.0

gsave%We'remuckingaboutwithgraphicsstate...savetheoriginal

7272translate%positionthelowerleftat(72,72)

7272scale%maketheimage1inchsquare

8%8columnsintheimage

8%8rowsintheimage

1%1-bitperpixel:

blackandwhite

[800800]%maptheunitsquareto(0,0)-(8,8)

{}%theimagedataasahex-encodedstring

image%actuallydrawtheimage

grestore

showpage

%A16-shadehorizontalgradient

%!

PS-Adobe-3.0

gsave

21672translate%lower-leftofimagesat(216,72)

72144scale%sizeofrenderedimageis72pointsby72points

16%16pixelswide

1%1pixelhigh

4%4bitsperpixel

[1600100]%transformarray...mapsunitsquaretopixels

{<0123456789ABCDEF>}%theimagedataitself

image%let'sdraw!

grestore

showpage

%A16-tonecolorgradientfromgreentoblue

%!

PS-Adobe-3.0

gsave

36072translate

72144scale%sizeofrenderedimageis72pointsby72points

16%numberofsamplesperline

1%numberoflines

4%bitspercolorchannel(1,2,4,or8)

[1600100]%transformarray...mapsunitsquaretopixels

{<0000000000000000>}%theredimagedata

{}%thegreenimagedata

{<0123456789ABCDEF>}%theblueimagedata

true%pullchannelsfromseparatesources

3%3colorchannels(RGB)

colorimage

grestore

showpage

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2