最后更新:2025年2月20日

什么是PostScript?
PostScript (PS) 是一种页面描述语言 (PDL),由Adobe Systems于1982年开发。主要用于桌面出版、打印和图形设计,用于描述文本和图像如何在页面上呈现。

对PostScript (PS)的解释
PostScript (PS) 既是一种页面描述语言 (PDL),也是一种编程语言,其是动态类型和基于堆栈的。这意味着:
1. 页面描述语言 (PDL) 是什么?
页面描述语言定义了图形和文本在打印页面或屏幕上的显示方式。PostScript用于打印机、出版软件和数字排版,以精确呈现字体、图像和布局。
2. 什么是基于堆栈的编程语言?
PostScript 使用堆栈来处理命令,遵循**后入先出 (LIFO)**的方法。例如,在PostScript中添加两个数字,你需将它们压入堆栈,然后调用一个运算符来处理它们:
10 20 add
这会将 10
和 20
压入堆栈,然后 add
命令将它们弹出并将结果 (30
) 再次压入堆栈。
3. 动态类型
PostScript不需要显式的类型定义。变量可以保存不同类型(数字、字符串、数组等),无需预定义类型。
4. PostScript的用途
PostScript主要用于桌面出版和电子出版,即帮助创造和打印高质量的文档,精确控制字体、布局和图形。
5. 图灵完备的语言
Being 图灵完备意味着PostScript理论上可以完成任何计算,只要有足够的内存和时间。这意味着它不仅用于打印,还可以用于一般的编程任务。
6. 历史和发展
- Adobe Systems于1982至1984年间开发。
- 由John Warnock、Charles Geschke、Doug Brotz、Ed Taft和Bill Paxton创建。
- 最新版本,PostScript 3,于1997年发布,增加了更好的性能、色彩管理和图像压缩。
PostScript历史
PostScript的起源可以追溯到1976年,当时John Gaffney在Evans & Sutherland工作时开发了页面描述语言的概念,同时Xerox PARC正在开发激光打印机并需要一种标准来定义页面图像。他们首先创建了Press格式,随后在1978年演变为由John Gaffney 和 Martin Newell开发的Interpress。

在1982年,John Warnock 和 Chuck Geschke 离开了Xerox PARC,并共同创立了Adobe Systems,与Doug Brotz、Ed Taft 和 Bill Paxton一起开发了PostScript,作为一个简单的Interpress替代品。它于1984年商业发布。
Apple在PostScript成功中的角色
在1983年,Steve Jobs看到了PostScript对Macintosh的潜力,并从Adobe以150万美元授权它,以及250万美元用于Adobe 20%的股份。他还尝试收购Adobe但未成功。苹果和Adobe然后共同努力优化PostScript用于苹果的LaserWriter打印机——于1985年推出,这在桌面出版革命中起到了关键作用。
Adobe 在字体渲染和提示中的突破使PostScript即使在较低分辨率的300 dpi佳能激光打印机上也能运行。Adobe并未申请这项技术的专利,以将其作为商业秘密。
PostScript的衰退和遗产
在20世纪80和90年代,PostScript广泛用于激光打印机,但其高处理能力和内存需求使其成本高昂。随着打印机变得更便宜,计算机更加强大,以软件为基础的解决方案取代了硬件PostScript处理。到2001年,大多数低端打印机放弃了PostScript支持,转而采用喷墨技术和软件渲染。
然而,PostScript在高端专业打印机中仍然占主导地位,在这些设备中,它将渲染从计算机转移到打印机,提高了性能。此外,PDF(便携式文档格式)——PostScript的直接后代——已成为电子文档分发的标准。
PostScript等级
PostScript通过不同等级进行了演化,每个等级提高了功能、性能和效率。共有三个主要等级:

1. PostScript等级 1 (1984)
原始PostScript(1984年发布的1级)可以让用户精确控制页面布局,包含文本、图形和图像,应用于早期的激光打印机。然而,它仅限于灰度,复杂的图形处理速度较慢,并由于缺乏图像压缩导致生成大文件。
- 原始版本,由Adobe于1984年发布。
- 为文本、图形和图像提供设备无关的页面描述。
- 允许对排版和布局进行精确的控制。
- 应用于第一代PostScript打印机,包括苹果LaserWriter。
- 限制:
- 缺乏颜色支持(仅限于灰度)。
- 复杂图形处理速度慢。
- 缺乏内置图像压缩,导致文件尺寸大。
2. PostScript Level 2 (1991)
PostScript Level 2 (1991)提升了性能,增加了彩色打印,压缩了文件,改进了字体,并加快了复杂图形处理速度。
- 改进了性能和内存效率。
- 增加了彩色打印支持(CMYK和专色)。
- 引入数据压缩以减少文件大小。
- 启用了改进的字体处理(Type 1和Type 3字体)。
- 引入了模式、表单和组合字体以改善文本渲染。
- 复杂图形处理速度更快,与一级版本相比提高了性能。
3. PostScript 3 (1997)
PostScript 3(1997年)是一次主要更新,提高了渲染速度和色彩表现,支持超高分辨率打印,改进了字体,并增强了图形效果。尽管现在已不那么常见,但仍用于一些高端打印。
- 重大升级,实现更高效的渲染。
- 使用ICC配置文件提升颜色管理。
- 改进了高分辨率打印的支持(超过2400 dpi)。
- 更好的字体处理,包括对多母版字体的支持。
- 提供更多透明和渲染效果(更好的图形渲染)。
- 在现代出版业中被PDF工作流替代,但在高端打印机中仍然在使用。
PostScript在打印中的应用
在PostScript出现之前:
- 早期的打印机仅打印文本字符,通常为ASCII,具有固定的字形(例如,打字机键、金属带或光学板)。
- 点阵打印机引入了可选字体和自定义字形上传功能,以及通过转义序列实现的基本光栅图形,但需要为每个打印机型号提供特定的驱动程序。
- 矢量图形由绘图仪(例如,基于HPGL的)处理,但它们速度慢、价格昂贵且仅限于图形。
PostScript 打印:
- 激光打印机结合了点阵打印机和绘图仪的优点,实现了高质量的文本和图形在同一页。
- PostScript统一了打印控制,提供了跨不同打印机和软件都适用的通用语言。
- 与传统打印机控制语言不同,PostScript 是一种完整的编程语言,允许精确的文档渲染。
- 动态光栅化:PostScript 使用直线和贝塞尔曲线定义每一件事(包括文本),允许平滑的缩放、旋转和变形。
- PostScript 解释器被称为光栅图像处理器 (RIPs),可以将指令转化为最终输出时所需的点。
PostScript 字体处理
PostScript的字体系统使用基本的图形形状创建可缩放的字形,允许字体在不失去质量的情况下调整大小。字体提示用于确保字体即使在小尺寸或低分辨率下也能保持清晰可辨。PostScript字体存储在各种专门的“类型”格式中,每种格式提供不同的功能。

PostScript 字体系统
- 使用图形基础定义可缩放的字形。
- 字体提示确保即使在低分辨率下也能获得高质量的渲染。
- 字体以各种专门的类型格式存储,具有不同的功能。
PostScript 字体类型
PostScript 提供了各种字体格式,每种格式提供不同的功能,例如Type 1、Type 2和CID-Keyed字体。
Type 1 字体 (T1):
- Adobe开发的压缩和加密的专有字体格式。
- 用于高质量且带提示的字体。
- Adobe 最初以费用许可使用 Type 1 技术。
Type 2 字体 (T2) & 压缩字体格式 (CFF):
- 减少了字体文件大小以提高效率。
- 成为OpenType字体的基础。
CID 键控字体:
- 设计用于具有大编码空间的亚洲(CJK)字符集。
- 可以使用Type 1或Type 2结构。
Type 1 支持的终止
- Adobe 正式于2023年1月停止支持Type 1字体,并转向支持OpenType。
便携式文档格式 (PDF) 与 PostScript
PDF 与 PostScript
PDF和PostScript是两种文件格式,由于它们使用相同的底层图形系统,因此可以生成相同的打印输出。关键区别在于他们的结构:PostScript是一种完整的编程语言,而PDF是一种更轻量的文档格式。这意味着后者在打印过程中更易于处理和管理。此外,PDF可以转换为PostScript,反之亦然。

- 相似的成像模型 – PDF和PostScript使用相同的图形系统,确保相同的印刷输出。
- 区别在于什么?
- PostScript 是一种能够进行动态操作的图灵完备编程语言。
- PDF 是一种更轻量化的文档格式。
- 互相转换能力 – PDF 可以转换为 PostScript,反之亦然。
PostScript 语言
PostScript 是一种与 Forth 类似的基于堆栈的动态类型编程语言,但具有类似 Lisp 的数据结构。它使用逆波兰表示法,要求小心的内存管理。PostScript 使用数组和字典,运行时进行类型管理,并且包含垃圾收集。注释以“%”开始,程序通常以“%!PS”开始。
- 基于堆栈的编程语言 – 使用逆波兰表示法,算子在堆栈上操作,这需要小心管理。
- 内存管理 –
- 使用作用域内存。
- 在PostScript Level 2引入了垃圾回收。
- 数据结构 –
- 使用数组和字典。
- 否需要正式的类型声明—类型是在运行时管理的。
- 注释和程序结构 – 注释以“%”开头,程序通常以“%!PS”开始。
PostScript的使用方式
- 大多数情况下由软件生成,而非手动编写。
- 可以用作一个成熟的编程语言进行自动化处理。
- 由打印机(RIPs)或屏幕查看器解释。
简单PostScript文件示例
以下是一个简单的PostScript (.ps)文件示例,它将在页面上打印“Hello, World!”:
10 20 moveto
/Times-Roman findfont
24 scalefont
setfont
(Hello, World!) show
showpage
解释:
%!PS
→ 将文件标识为PostScript文档。/Times-Roman findfont 24 scalefont setfont
→ 选择大小为24的Times-Roman字体。100 700 moveto
→ 将光标移动到页面的坐标**(100, 700)**。(Hello, World!) show
→ 在特定位置输出"Hello, World!"。showpage
→ 指示打印机打印页面。
你可以将其保存为hello.ps,用PostScript查看器(例如 GSview、Ghostscript)打开,或者发送到PostScript打印机。
渲染之后的Hello.ps

用于呈现PostScript的软件列表
PostScript 查看器和解释器
- Ghostscript(开源)– 用于PostScript和PDF的流行解释器。
- GSview – Ghostscript的GUI前端。
- MuPDF – 支持PostScript和PDF的轻量级查看器。
- Xpdf – 开源PDF查看器,具有一些PostScript支持。
- Evince – GNOME文档查看器,能够处理PostScript文件。
- Okular – 支持PostScript文件的KDE文档查看器。
- Apple Preview – 内置macOS查看器,支持PostScript和PDF。
PostScript 打印机和光栅化工具
- Adobe Acrobat Distiller – 将PostScript转换为高质量PDF。
- CUPS(通用Unix打印系统) – 处理Unix/Linux上的PostScript打印。
- PPR (Printer Production Release) – PostScript打样机和渲染器。
矢量图形和DTP软件
- Adobe Illustrator – 可以打开和编辑PostScript文件。
- CorelDRAW – 支持用于矢量图形的PostScript。
- Scribus – 支持PostScript的开源桌面出版软件。
- Inkscape – 可以导入/导出PostScript(通过Ghostscript)。
命令行和转换工具
- ps2pdf(Ghostscript的一部分)– 将PostScript转换为PDF 。
- pstopdf(macOS命令行工具)– 将PostScript转换为PDF。
- ImageMagick – 可将PostScript文件渲染为图像。