Postscript是一款非常强大的编程语言,直译为后处理脚本,学名为页面描述语言。主要用意是为以相对设备独立的方式描述影像提供一种方便的语言。该设备相对独立是指不以某种特定设备特性作参照,来描述影像(比如印表机c解析度),这样同一种描述不需修改就可适用于任何一种PostScript印表机(比如,LaserWriter 或Linotron)
1、增进速度和可靠性
在Level 2出现之前,Limitcheck和Vmerror PostScript错误非常麻烦,令人头痛。Adobe优化了PostScript程式码和增强程式码的记忆管理功能。该功能提高了功效,尤其对於旋转的扫描作业。
2、支持分立的内置RIP
Level 2 RIPs能够接受合成的PostScript文件,自行处理分色工作。它并不是一个必须遵循的功能,不同生产商的Level 2 RIPs的功能也有不同。
3、支持合成字体
该功能对于亚洲国家来讲相当重要,他们的字符比欧洲使用的大。Apple通过QuickDrawGX来支持合成字体。现今你可能只在Apple的档案储藏柜里找到,还有其他的一些技术突破如OpenDoc 和the Newton。
1、PostScript能够有效的避免版面制作对使用设备的依赖性,只要符合PS这个标准的数据格式,不管是用MAC微机编辑也好,还是用SUN工作站进行编辑也好,都可以通过打印驱动程序获得共同的PS编码文件。
2、PostScript能够综合处理文字和图像,在一页印刷品中,PS将其中的所有信息都用一种计算机数据来表现和描述,为图文合一的版面处理提供了可能。
3、拥有页面数据格式,不同生产厂家的通用计算机之间和各种专用计算机系统(设计用,文字处理用,图像制版用等)之间,才可能进行数字化数据的交换,它是印前处理系统开放化的基础之一。
4、以相对设备独立的方式描述影像提供一种方便的语言,该设备相对独立是指不以某种特定设备特性作参照,来描述影像(比如印表机的解析度),这样同一种描述不需修改就可适用于任何一种PostScript印表机(比如,LaserWriter 或Linotron)。实际情况下,有些PostScript文件对于目标设备做假设定(比如它的解析度或纸匣的数量),但这并不实用,而且局限了可转移性。
算法
例如:
3 4 add 5 1 sub mul将执行 (3 + 4) × (5 - 1) 这样的计算。
让我们详细地分析一下这是如何完成的:
3 和 4 都是符号,它们将自己放到堆栈中,在这两个命令之后,堆栈将变成这样:
43add是一个运算符,它将堆栈中最上面的两个元素取出(在我们的例子中是3和4)、将它们相加、然后将结果放到堆栈上:
7下面又是两个符号,它们将把堆栈变成这样(需要注意的是操作仅仅局限在堆栈顶部,下面的元素不受影响):
157另外一个运算符sub,从堆栈顶取出两个元素、第二个减去第一个、然后将结果放到堆栈:
47很显然mul同其它两个运算符一样,从堆栈取出两个元素、将它们的乘积放到堆栈:
28
Named variables
上面的例子只是一个古老的逆波兰表示法计算,当然PostScript也使用变量。详细地说就是它有一个字典用来查找所有不是符号的东西;如果查到的话,那个名字下保存的值就会压缩到栈中(或者更应该说是执行——参见后面的内容);找不到就返回错误。将一个变量放到字典中需要使用def运算符,它用一个名字和一个值作为参数,通过在前面使用斜线构建一个名字。因此
/x1 15 def首先将名字“x1”放到堆栈上、然后是值15、然后执行def,它将从堆栈中取出“x1”和15,并且将15写到字典中“x1”的下面。后面出现的“x1”(注意不要与“/x1”混淆)将会将15放到堆栈而变量并不改变。下面的代码会将x1的值增加2:
/x1 x1 2 add def
堆栈运算符
PostScript有几个操作符用于重组或者控制堆栈:复制(dup)、丢弃(pop)和交换(exch)在堆栈顶部进行操作,然而roll旋转堆栈中的某一部分,copy复制某个特定的部分,index允许象数组那样访问堆栈。
处理过程定义
{和}提供了一些编程的工具。{将解释器切换到延迟运行模式,所有的东西甚至是运算符和其它的可执行对象都放到堆栈中,其中一个例外就是},它将堆栈中从{开始的所有内容,绑定成一个(匿名)处理过程,然后将它放到堆栈上。
这种结构有几种不同的用途,如子程序定义(匿名程序赋给一个变量)、循环、条件等等:
x1 0 eq { 0 } { 1 x1 div } ifelse这段代码首先使用eq测试 x1 是否是 0;根据结果的不同将真或者假放到堆栈上。在此之后,将两个过程放到堆栈上,然后执行ifelse,它从堆栈中取出三个参数,如果第三个参数是真就执行第二个否则就执行第一个。总之,如果 x1 是 0 结果就是 0, 其它情况结果就是 1/x1。
/inc3 { 3 add } defHeredefis used to place something in thedictionary, only this time it is a procedure instead of a simple integer. This works because the values coming from the dictionary areexecuted, not just pushed (as simplistically stated above). Since executing a literal amounts to pushing it, that did not make a difference before. Now executing "inc3" will first look it up in the dictionary, find the procedure object representing "{ 3 add }" and execute that. One value must reside on the stack for this to work, sinceaddneeds two arguments, only one of which is given in the procedure itself. Naturally, one passes arguments to procedures by placing them on the stack, so we can simply view "inc3" as a procedure that takes one argument. Example call: 这里def将内容放到字典中,仅仅在这个时候它是一个过程而不是简单整数。
71 inc3将71放到堆栈上,inc3将它的值加3,这样就得到结果74。
同类推荐
2022-09-18
立即下载2022-09-14
立即下载2022-09-14
立即下载2022-09-14
立即下载2022-09-14
立即下载2022-09-14
立即下载相关文章
Visual Studio Code如何打开折叠缩进线?
2022-05-26Visual Studio Code如何关闭编辑器参考线?
2022-05-26Visual Studio Code如何添加Maude条目?
2022-05-26Visual Studio Code如何添加扩展插件?
2022-05-26Visual Studio Code如何转换markdown文件格式?
2022-05-26WebStorm如何导入项目?WebStorm导入项目的技巧
2022-03-22WebStorm如何新建Html文件?
2022-03-22Visual Basic如何制作一个选项卡式的视窗窗口?
2022-02-23Visual Basic如何给表格中数据添加批注?
2022-02-23Visual Basic如何添加用户控件?
2022-02-23