PostScript 是一种编程语言,最适用于列印图像和文字(不管是在纸、胶片或非物质的 CRT
均可)。用现今的行话讲,它是页面描述语言。它既能够像程序代码同样具备可读性,又能表示出可任意放大和缩小的矢量图。git
Postscript 语言以空格,换行符或水平制表符做为基本分割符,以百分号("%")为注释开始的标志,每行注释在遇到换行符结束,全部的字符都用 ansi
编码。github
Encapsulated PostScript 是一种被封装的 PostScript 格式,简称 EPS。它主要包含如下几个特征:编程
(1)EPS 文件格式又被称为带有预视图象的 PS 格式,它是由一个 PostScript 语言的文本文件和一个(可选)低分辨率的由 PICT
或TIFF
格式描述的表明像组成。编程语言
(2)EPS 文件格式的“封装”单位是一个页面,也就是一个。EPS 文件只包含一个页面的描述。这样,若是有50个页面的出版物就会产生50个 EPS 文件。另外要注意:页面大小能够随着所保存的页面上的物体的总体长方形边界来决定,因此它既可用来保存组版软件中一个标准的页面大小,也可用来保存一个独立大小的对象的矩形区域。编辑器
(3)其文本部分一样既可由 ASCII
字符写出(这样生成的文件较大,但可直接在普通编辑器中修改和检查),也能够由二进制数字写出(生成的文件小,处理快,但不便修改和检查)。svg
(4)EPS 文件虽然采用矢量描述的方法,但亦可容纳点阵图像,只是它并不是将点阵图像转换为矢量描述,而是将全部像素数据总体以象素文件的描述方式保存。而对于针对象素图像的组版剪裁和输出控制参数,如轮廓曲线的参数,加网参数和网点形状,图象和色块的颜色设备特征文件(Profile)等,都用 PostScript 语言方式另行保存。工具
PostScript 语言可以用来描述图形和文本。它既可在传统的 PostScript(PS) 文件中来描述多页的文档,也用于 Encapsulated PostScript(EPS) 文件中来描述插入文档的图形。 PS 和 EPS 主要的区别在于:学习
BoundingBox
行来肯定 EPS 图形的大小。因为 EPS 图形须要和其它对象一块儿共享页面,因此 EPS 文件中不能使用像 选择页面大小 (a4
或 letter
) 和清除整个页 面 (erasepage
) 等命令。下面是一些不能在 EPS 文件中使用的 PostScript 操做符:ui
a3 | a4 | a5 | banddevice |
---|---|---|---|
clear | cleardictstack | copypage | erasepage |
exitserver | framedevice | grestoreall | initclip |
initgraphics | initmatrix | letter | legal |
note | prenderbands | quit | renderbands |
setdevice | setglobal | setpagedevice | setpageparams |
setsccbatch | setshared | startjob | stop |
尽管下列 PostScript 操做符能够在 EPS 文件中使用,可是不适当的使用它们极易致使错误:编码
nulldevice | setcolortransfer | setgstate | sethalftone |
---|---|---|---|
setmatrix | setscreen | settransfer | undefinedfont |
上面的一些操做符可能会使 PS 到 EPS 的转换失败,另外一些则可能致使像 图形位置错误或图形消失等奇怪的问题。由于这些操做符绝大部分不会影响 到 PostScript 的堆栈,因此,在大多数状况下,简单的将这些招致问题的操做符 删除就可解决问题。其它的情形则须要更为复杂的 PostScript 的知识。
习惯上,PostScript 文件的第一行是标明该文件的类型,接下来的几行是 被称为 header 或 preamble 的注释行 ( PostScript 的注释符也是 %)。 这些注释中的一行就定义了 BoundingBox 。BoundingBox 这行有四个整数值, 分别表明:
%!PS-Adobe-2.0 EPSF-2.0
%%Creator: gnuplot
%%DocumentFonts: Times-Roman
%%BoundingBox: 50 50 410 302
%%EndComments
复制代码
上面的例子是一个EPS 文件的前五行, 这个 EPS 图形的左下角的坐标是 (50,50), 右上角的坐标是 (410,302)。这里坐标的单位是 PostScript point, 等于 1/72 英寸。这样上面的这幅图的天然宽度为 5 英寸, 相应的天然高度为 3.5 英寸。须要注意的是 PostScript point 要比 TEX point (等于 1/72.27 英寸)稍大, 在 TEX 和 LATEX 中,PostScript points 被称为 big points'' 或简称 `bp`, TEX point 被称为
points'' 或简称 pt
。
单页的 PostScript 文件,若是没有包含不适当的命令的话,可用下述方法转为 EPS 文件并加上 BoundingBox。 因为这些方法 都不检查非法的 PostScript 操做符,因此只有在被转换的 PostScript 文件自己 不含有那些被禁制使用的操做符的状况下,才能获得正确的 EPS 文件。
ps2epsi
。它能够读入 PostScript 文件并计算 BoundingBox 的参数,而后生成一个含有 PostScript 图形 的 EPS 文件。 最终获得的 EPS 文件是 EPSI 格式,即它在文件的开始部分带有一个底分辨率的预览位图。由于这个预览位图是 ASCII编码 的,使得文件变大。\includegraphics
的 bb
方式)。计算 BoundingBox 的方法有如下几种:用 Ghostview 或 GSview 将 PostScript 图形打开,当鼠标在图形上移动时就会显示相应的坐标(以页面的左下角为参照点)。 记下图形的左下角和右上角的坐标就可肯定它的 BoundingBox。
将 PostScript 图形打印一份,测量它的左下角和右上角到页面的左下角 的水平和垂直距离(以英寸为单位),而后乘以
使用 bbfig
。bbfig
是一个脚本文件, 它在 PostScript 图形文件前面加入一些 PostScript 命令并送往 PostScript 打印机。这时加入的命令会计算 BoundingBox, 而后将结果打印在 PostScript 图形上面。
Post Script 很是适合制做学术论文插图,由于在不少顶尖学术期刊要求示意图必须为矢量图,而 Latex 支持的矢量图通常都是 eps 格式的矢量图。Adobe公司的illustrator和免费软件Inkscape都支持eps格式矢量图的编辑。公式编辑器MathType,几何做图软件Geogebra,还有强大的科学计算软件Matlab都支持保存为eps格式矢量图。所以,若是学会了Post Script语言,能够在它们输出的矢量图的基础上加以修改,从而获得更适应论文的插图,对于写出高质量的学术论文有重要意义。
学习PostScript语言推荐的书为Adobe公司发布的Post Script Language Reference Third Edition,这本书能够在公司官网免费下载电子版 。
svg-cairo-ps 基于 Cairo 二维矢量图形库转换
svg-path-parse An SVG path parser
参考资料: