• 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
    复制代码

    说明:

    setline设置线的宽度

    复制代码
    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处右端对齐。

  • 相关阅读:
    定时器准确定时八位时钟
    数码管八位显示时钟
    串口通讯
    定时器/计数器0(定时器)
    定时器/计数器0之计数器
    定时器/计数器0(计数器)
    外部中断0
    LCD带字符液晶显示I LOVE YOU
    Altium Designer Summer 09换成中文步骤
    BAT小米奇虎美团迅雷携程等等各大企业校招,笔试面试题。
  • 原文地址:https://www.cnblogs.com/lf-cs/p/12102195.html
Copyright © 2020-2023  润新知