PostScript 与 Encapsulated PostScript
PostScript
PostScript 是一种编程语言,最适用于列印图像和文字(无论是在纸、胶片或非物质的 CRT
都可)。用现今的行话讲,它是页面描述语言。它既可以像程序代码一样具有可读性,又能表示出可任意放大和缩小的矢量图。
Postscript 语言以空格,换行符或水平制表符作为基本分割符,以百分号("%")为注释开始的标志,每行注释在遇到换行符结束,所有的字符都用 ansi
编码。
Encapsulated PostScript
Encapsulated PostScript 是一种被封装的 PostScript 格式,简称 EPS。它主要包含以下几个特征:
(1)EPS 文件格式又被称为带有预视图象的 PS 格式,它是由一个 PostScript 语言的文本文件和一个(可选)低分辨率的由 PICT
或TIFF
格式描述的代表像组成。
(2)EPS 文件格式的“封装”单位是一个页面,也就是一个。EPS 文件只包含一个页面的描述。这样,如果有50个页面的出版物就会产生50个 EPS 文件。另外要注意:页面大小可以随着所保存的页面上的物体的整体长方形边界来决定,所以它既可用来保存组版软件中一个标准的页面大小,也可用来保存一个独立大小的对象的矩形区域。
(3)其文本部分同样既可由 ASCII
字符写出(这样生成的文件较大,但可直接在普通编辑器中修改和检查),也可以由二进制数字写出(生成的文件小,处理快,但不便修改和检查)。
(4)EPS 文件虽然采用矢量描述的方法,但亦可容纳点阵图像,只是它并非将点阵图像转换为矢量描述,而是将所有像素数据整体以象素文件的描述方式保存。而对于针对象素图像的组版剪裁和输出控制参数,如轮廓曲线的参数,加网参数和网点形状,图象和色块的颜色设备特征文件(Profile)等,都用 PostScript 语言方式另行保存。
PostScript 与 Encapsulated PostScript 区别
PostScript 语言能够用来描述图形和文本。它既可在传统的 PostScript(PS) 文件中来描述多页的文档,也用于 Encapsulated PostScript(EPS) 文件中来描述插入文档的图形。 PS 和 EPS 主要的区别在于:
- EPS 文件仅仅使用部分特定的 PostScript 操作符。
- EPS 文件必须含有一个
BoundingBox
行来确定 EPS 图形的大小。
Encapsulated PostScript 禁止使用的 PostScript 操作符
由于 EPS 图形需要和其它对象一起共享页面,所以 EPS 文件中不能使用像 选择页面大小 (a4
或 letter
) 和清除整个页 面 (erasepage
) 等命令。下面是一些不能在 EPS 文件中使用的 PostScript 操作符:
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 的知识。
The EPS BoundingBox
习惯上,PostScript 文件的第一行是标明该文件的类型,接下来的几行是 被称为 header 或 preamble 的注释行 ( PostScript 的注释符也是 %)。 这些注释中的一行就定义了 BoundingBox 。BoundingBox 这行有四个整数值, 分别代表:
- BoundingBox 的左下角的 x 坐标。
- BoundingBox 的左下角的 y 坐标。
- BoundingBox 的右上角的 x 坐标。
- BoundingBox 的右上角的 y 坐标。
%!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
。
将 PS 转换为 EPS
单页的 PostScript 文件,如果没有包含不适当的命令的话,可用下述方法转为 EPS 文件并加上 BoundingBox。 由于这些方法 都不检查非法的 PostScript 操作符,所以只有在被转换的 PostScript 文件本身 不含有那些被禁制使用的操作符的情况下,才能得到正确的 EPS 文件。
- 最方便的是用 GhostScript 里带的
ps2epsi
。它可以读入 PostScript 文件并计算 BoundingBox 的参数,然后生成一个含有 PostScript 图形 的 EPS 文件。 最终得到的 EPS 文件是 EPSI 格式,即它在文件的开始部分带有一个底分辨率的预览位图。因为这个预览位图是 ASCII编码 的,使得文件变大。 - 另一种方法是计算 BoundingBox 的参数,然后把它加到 PostScript 文件中 或作为插图命令的参数(比如用
\includegraphics
的bb
方式)。计算 BoundingBox 的方法有以下几种:
用 Ghostview 或 GSview 将 PostScript 图形打开,当鼠标在图形上移动时就会显示相应的坐标(以页面的左下角为参照点)。 记下图形的左下角和右上角的坐标就可确定它的 BoundingBox。
将 PostScript 图形打印一份,测量它的左下角和右上角到页面的左下角 的水平和垂直距离(以英寸为单位),然后乘以
就可得到 它的 BoundingBox。
使用
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
参考资料:
PostScript
Encapsulated PostScript
PostScript 与 Encapsulated PostScript相关推荐
- Matplotlib(二)绘图生命周期
上篇 python matplotlib入门(一)主要介绍了matplotlib的workflow, 这一篇将主要介绍 matplotlib 绘图的生命周期,只有了解了matplotlib 的内部 ...
- 最好PDF软件汇总070623
最好PDF软件汇总070623 ★★全面接触PDF:最好用的PDF软件汇总(20070623) 作者:xbeta 版本:070623/060510 http://blog.sina.com.cn/u/ ...
- 文件格式大全(A-H)
<前言> 经常有网友问什么什么扩展名的文件要用什么程序来打开,事实上,电脑上 面真正能表示文件的类型并且得到一致承认的扩展名并不是很多,而大多数扩展 名一般都是由使用该文件的软件的开发者定 ...
- Python数据科学学习笔记之——Matplotlib数据可视化
Matplotlib 数据可视化 1.Matplotlib 常用技巧 1.1.导入 Matplotlib import matplotlib as mpl import matplotlib.pypl ...
- \t\t终身受用!告诉你关于PDF文件的一切
文章导读:本文介绍PDF阅读器.PDF编辑与制作软件.PDF文件格式转换(如PDF转Word),及PDF在线工具等等:以免费软件为主.不涉及破解PDF保护.不涉及非Windows环境.Latex等软件 ...
- coreldraw 导入面料_CDR真强!支持导入的文件格式这么多
原标题:CDR真强!支持导入的文件格式这么多 CorelDRAW作为世界一流的平面矢量绘图软件,被专业设计人员广泛使用,作为强大的图形设计工具包含对超过 100 种常用文件格式的广泛文件兼容性支持,它 ...
- 详解CorelDRAW中的PostScript填充
交互式填充工具可以在对象中应用PostScript填充,PostScript底纹填充是使用PostScript语言创建的.有些底纹非常复杂,因此打印或屏幕更新可能需要较长时间.填充可能不显示,而显示字 ...
- TrueTpye字体和postscript字体
什么是TrueType技术?TrueType字体有什么特点? 答:TrueType是由AppleComputer公司和Microsoft公司联合提出的一种新型数学字形描述技术.它用数学函数描述字体轮廓 ...
- 使用Aspose.Pdf for .NET实现PDF文档到Excel、EPS、SVG等的转换
Aspose.Pdf for .NET v8.6.0于昨日发布,该版本包含一个相当令人期待和兴奋的功能--就是让你能转换PDF文件为MS Excel工作簿.使用这个新的更新,开发人员就可以转换PDF文 ...
- matlab mnl,LaTex中插入VISO 和 MATLAB 经验总结
LaTex中插入VISO图形 1. 在VISO中,调整图形大小. [文件]-->[页面设置]-->[页面尺寸]-->[调整大小以适合绘图内容]-->[确定] 这样,图形就可自 ...
最新文章
- 对xxl-job进行simpleTrigger并动态创建任务扩展
- Shell第一个脚本-添加用户
- PDF下载!《Python十大基础专题》《247个Python综合案例》《Pandas 20页学习笔记》...
- IE6 PNG 透明的方法
- 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档
- 防止黑客入侵的五大技巧
- php中函数的默认值,参数的顺序
- pytorch torch.ones
- PHP开发从入门到实战教程分享
- 企业微信双开及三开的方法
- android 收税计算器,个人所得税计算器2021
- 运行zookeeper提供者报错:org.jboss.netty.util.internal.jzlib.ZStream scanned from multiple locations: jar:
- 2017中国开发者调查报告-云栖社区
- 跨境茶话会8月期丨性能优化的艺术
- 用 Adobe 设置 PDF 文件在文件管理器右侧预览窗格预览
- MyBatis一发入魂(一)
- spring 项目启动完成执行_凝聚合力形成攻坚之势——21天顺利完成启动炉烟道改造施工项目...
- C Halting Problem
- python交通调查数据处理_GitHub - unlimitbladeworks/traffic-monitor: 基于高德地图的交通数据分析...
- 医药领域知识图谱快速及医药问答项目--项目探究
热门文章
- Vue 豆瓣电影项目
- html图片顺时针倾斜50度,【资源】纯CSS右上角倾斜四十五度封页角效果
- 手机微信如何打开html文件,手机上怎么找微信里的电子文件
- qcloud_cos 的安装问题
- java list下标_java8 stream根据下标分组
- 天下3 最多的服务器,《天下3》服务器合并规则
- python sns可视化小技巧(纪录所得)
- 基于 SpringBoot + MyBatis-Plus 的公众号管理系统
- html a5 尺寸,纸型尺寸大小(A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5......)
- JDK源码解析之HashSet