PostScript语言.doc_第1页
PostScript语言.doc_第2页
PostScript语言.doc_第3页
PostScript语言.doc_第4页
PostScript语言.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、概述PostScript语言是Adobe公司设计用于向任何支持PostScript语言的打印机打印文件的页面描述语言。Postscript既是一种页面描述语言,也是一种高级解释型脚本语言。由于它与设备的无关性,使得它无论在那种平台上,都能忠实的再现原貌,从而被广泛应用于打印出版行业,同时由于它是一种解释型脚本,所以它也可以像一般编程语言一样用来解决某些问题。PS语言一方面是一个具有较强图形功能的通用程序设计语言,另一方面它又是一个具有一般程序设计特性的页面描述语言, 因此它具有两者的特点:1. PS语言具有通用程序设计语言中的一些基本结构,如各种类型的数据、数组、字符串、控制语句、条件语言和过程等,它还包含有其它语言中一般不常用的名字(name)、词典(dictionary)等。2. 具有较强的图形功能 它能构成由直线、弧以及三次曲线所组成的任何形状的图形;填充原语允许图形外轮廓线是任意形状和粗细;裁剪路径也可以是任意形状。 文字和图形结合成一体,也就是说PS语言在图形模式下文字也作为图形来处理,PS中任何图形操作均适用于文字。 在通用坐标系中,PS支持由平移、变比、旋转、反射和扭斜等线性变换所组成的复合变换,且这些变换适用于页面描述语言中的所有元素:文字、图形和图像。二、通用程序设计语言PostScript语言具有通用程序设计语言的特性。字符“%”用来在PostScript程序中表示注释。作为一个通用的约定,每个PostScript都以字符“%!”开始,这样所有的设备都会将它解释为PostScript。1后缀表示法PS语言的语句采用后缀表示法,即在一个语句中,操作数在前,而相应的操作符在后,如:40 60 add 2 div200 300 moveto0 72 relineto第一条语句表示40和60相加后再除以2得50,第二、三条语句表示把现行点移到(200,300)后, 再沿垂直方向画一条长度为72的直线。例如: 3 4 add 5 1 sub mul将执行 (3 + 4) (5 - 1) 这样的计算。详细分析:3和4都是符号,它们将自己放到堆栈中,在这两个命令之后,堆栈将变成这样:43add 是一个运算符,它将堆栈中最上面的两个元素取出(在我们的例子中是3和4)、将它们相加、然后将结果放到堆栈上:7下面又是两个符号,它们将把堆栈变成这样(需要注意的是操作仅仅局限在堆栈顶部,下面的元素不受影响):157另外一个运算符sub,从堆栈顶取出两个元素、第二个减去第一个、然后将结果放到堆栈:47mul同其他两个运算符一样,从堆栈取出两个元素、将它们的乘积放到堆栈:282程序结构PS程序由两部分组成:序言(prologue)和正文(script)。序言中包含了正文中所用的过程定义和数值定义;而正文由PS操作符和序言中定义的过程所组成。简单用例子加以说明,下面这段程序是在页面的不同位置上画几个正方形,且用不同的灰度进行填充。在序言中定义了绘制正方形的过程box, 而在正文中逐一对box进行调用:% Define box procedure/box 72 0 relineto0 72 relineto-72 0 relinetoclosepath def% Begin programnewpath %first box200 300 moveto box0 setgray fillnewpath200 400 moveto box %second box4 setgray fillshowpage3数据类型和对象PS语言中可访问的数据称为对象(0bject),对象可以由PS操作符来产生、管理或撤销。每一个对象有类型、属性、以及相应值。PS管理的对象类型有:integer operatorreal fileboolean markarray nullstring savename fontIDdictionary下面对有关类型的对象进行简单的说明。(1)integer和real(整数和实数)如123 -98 -00028#1777 16#FFFE 2#100 %它们分别表示8进制、16进制和2进制数据。(2)array(数组)一维对象的集合。数组元素可以是不同类型的对象,如数字、字符串、或其它数组。如 123 /abc (xyz)该数组元素包含了数字123,name对象 “abc”和string对象(xyz)。(3)string(字符串)由括号( )给出的一串字符,如(This is string)。(4)name (名字)一些有关字符的集合,类似于其它语言中的标识符。 如abc offset 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不等于neif语句:格式:条件 op1 if条件如果为true则作大括号内的动作。ifelse语句:格式:条件 op1 op2 ifelse如果条件成立,执行op1,否则执行op2。例如:如果21印出greate2 1 gt (greate) if如果21印出greate否则印出little2 1 gt (greate) (little) if(2) 循环控制(for,repeat,loop,exit)for语句:格式:起始值 间隔 结尾值 事件 for例如:12 40 300 750 moveto (test) show for作12 750 moveto (test) show52 750 moveto (test) show292 750 moveto (test) showrepeat语句:格式:执行次数 事件 repeatloop语句:事件 loop5操作符操作符对象是表示一个PS内部动作。大多数操作符与系统词典中的name有关,name是关键字, 而值就是操作符本身。当PS解释器执行其中某一个name时,它就在词典堆栈中上、下查找name并执行它,从而完成指定的内部动作。格式:operand 1 operand 2 operand n operator result1 result2resultm 前面为n个操作,紧跟着为相应的操作符,得到m个结果。分类:PS共提供了240多个内部操作符,它们大致可分为:堆栈操作符;算术和数学运算操作符;数组、词典和串操作符;关系,布尔和按位运算操作符;控制操作符;类型、属性和转换操作符;文件操作符;虚拟存贮器操作符;以及PS语言中比较重要的文字、图形和图象操作符PS的特点之一是还可以由用户自定义新的操作符。6堆栈PS是一种栈式语言,它通过堆栈来直接访问数据,PS解释器管理4种不同类型且相互完全独立的堆栈:操作数(operand)堆栈:保存PS操作数和操作结果。词典(dictionary)堆栈:仅用于保存词典对象。解释器遇到可执行名字时,去查找当前字典堆栈。如果名字已经定义, 则去执行相应的操作;如果名字未定义, 则给出错信息。执行(execution)堆栈:保存可执行的对象(file or procedure)。当解释器中断目前所运行的一个对象转去执行其它程序对,PS则把暂停的对象推入“执行堆栈”。中断处理完成以后, 则弹出被中断了的对象继续执行。图形状态(graphics state)堆栈:保存或恢复与图形操作有关的信息,如彩色、路径、位置、画图参数、坐标变换矩阵、以及字库信息等。PostScript有几个操作符用于重组或者控制堆栈:复制(dup)、丢弃(pop)和交换(exch)在堆栈顶部进行操作,然而roll旋转堆栈中的某一部分,copy复制某个特定的部分,index允许像数组那样访问堆栈。三、页面描述语言作为页面描述语言PS提供了一组精确描述所需页面的图形操作符,它们适用于三种类型的对象:图形、文字和图像。1PS成像模型(image model)成像模型是指在设计图形系统对使用的一组规则,PS成像模型不再采用惯用的像素 (pixe1)操作,而是采用模板(stencia1)着色(paint)技术,即PS认为图像是通过墨水(ink)喷洒到页面上模板指定的区域而构成的,模板可以是由字母、线、填充区域、或半色调照片等图元组成,而墨水可以是各种颜色或任意灰度。一旦在页面上由各种模板构成了用户所希望的格式,就可以在任意光栅设备上输出。在实现PS成像模型时,以下三个基本概念非常重要。当前页面是指PS用于画图的“理想页面”,它与所使用的打印机功能无关。当前路径由一组相连或不相连的用于描述几何图形的形状和位置的点、线和曲线组成。当前路径所定义的几何形状不受限制,打印机的分辨率也不影响路径的定义。 裁剪路径是一个可以在其内部画图的区域边界。裁剪路径可以是任意形状,其缺省值为打印纸的大小。2坐标系PS在用户空间进行画图操作,其结果将自动地转换成指定设备坐标进行打印输出。因此,画图坐标系独立于所用设备。缺省的用户坐标其原点在左下角,单位172吋。PS语言可以用三种方法来改变PS用户空间:平移、变比和旋转变换translate:平移坐标x y translate %平移(x,y)距离scale: 缩放x y scale %水平方向缩放x倍,垂直方向缩放y倍rotate: 旋转angle rotate %旋转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使用普通的笛卡尔坐标系。100 200 moveto 300 400 lineto stroke将“光标”移到坐标点(100, 200)然后画线到(300, 400)。50 70 moveto 100 200 50 80 100 100 curveto stroke生成一个从(50, 70)到(100, 100)的立方贝塞尔曲线,控制点是(100, 200)和(50, 80)。250 250 moveto (Wikipedia) show在位置(250, 250)使用预先选择的字体画出文本“Wikipedia”,字体选择可以使用例如 /Courier findfont 12 scalefont setfont 这样的命令串。图形最初在“用户坐标系”中创建,在复制到确定最后输出的“设备坐标系”之前它们可以进行旋转、缩放或者扭曲等变换。 200 300 translate 45 rotate将用户坐标系中的内容上移 200 点、右移 300 点并且复制到设备坐标系时旋转 45 度。4.处理过程定义 和 提供了一些编程的工具。将解释器切换到延迟运行模式,所有的东西甚至是运算符和其他的可执行对象都放到堆栈中,其中一个例外就是,它将堆栈中从开始的所有内容,绑定成一个(匿名)处理过程,然后将它放到堆栈上。这种结构有几种不同的用途,如子程序定义(匿名程序赋给一个变量)、循环、条件等等:x1 0 eq 0 1 x1 div ifelse这段代码首先使用eq测试 x1 是否是 0;根据结果的不同将真或者假放到堆栈上。在此之后,将两个过程放到堆栈上,然后执行ifelse,它从堆栈中取出三个参数,如果第三个参数是真就执行第二个否则就执行第一个。即,如果 x1 是 0 结果就是 0,其他情况结果就是 1/x1。四、PS文件的常用档头第一行给出版本,如果没有给也可以但是最好是给出版本。%!PS-Adobe-3.0其它:%!PS-Adobe-3.0%Title: (Untitled2)抬头%Creator: (Microsoft Word: Laser Writer 8 8.4.2)建立程序%CreationDate: (3:40 PM Friday, May 9,1997)建立日期%For: (dubois)作者%Routing: (mailto:000)%Pages: 168总页数%PageOrder: Ascend页面排方式%Orientation: Portrait横向或直向%DocumentMedia: Default 612 792 0 () ()页面大小%EndComments结束注解五、外部链接PostScript语言手册第三版PostScript语言教程与手册PostScript入门导引六、具体问题的解决1. 用PS语言如何在位置(x,y)处打上一个黑点 %在50 51(单位为1/72英寸)处打一黑点,大小为1/72英寸,0.35mmnewpath50 50 moveto50 51 linetoclosepathstrokeshowpage2. 用PS语言写循环语句循环语句(for,repeat,loop,exit)for语句:格式:起始值 间隔 结尾值 事件 for例如:12 40 300 750 moveto (test) show for作12 750 moveto (test) show52 750 moveto (test) show292 750 moveto (test) showrepeat语句:格式:执行次数 事件 repeatloop语句:事件 loop3. 用PS语言如何建一个宽度是M,高度是N的图像在PS语言中关于光栅图形的操作符是image。image操作符比较复杂,它有五个参数。格式:width height depth matrix data imagewidth和height:以像素的形式定义图像矩阵的大小和形状depth:每个像素所占的位数matrix:由单位矩形映射到图像像素坐标的转换矩阵data:以十六进制形式表示的图像数据例:% A simple smiley face%!PS-Adobe-3.0gsave % Were mucking about with graphics state. save the original72 72 translate % position the lower left at (72, 72)72 72 scale % make the image 1 inch square8 % 8 columns in the image8 % 8 rows in the image1 % 1-bit per pixel: black and white8 0 0 8 0 0 % map the unit square to (0, 0) - (8, 8) % the image data as a hex-encoded stringimage % actually draw t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论