打印机命令语言

打印机命令语言（Printer Command Language，简称PCL）是惠普公司开发的一种页面描述语言，实际上，它已经成为业界标准。打印机命令语言最初是为1984年的早期喷墨打印机所设计的，后来开始用于热敏打印机、点阵打印机、激光打印机等不同打印机。

## PCL 从 1 到 5 综述

PCL 1 到 5e/5c 有共同的基础，它们按照所收到的数据的先后顺序进行处理与解释。从用户的角度来看，可以用打印机驱动程序生成 PCL 数据流。在不同的应用程序中都可以很容易地输出 PCL。

- PCL 1 于1984年出现，用于 HP ThinkJet 2225，它带有基本的文本与图形打印机功能，分辨率最大为 150 DPI。
- PCL 1+ 随着 HP QuietJet 2227 发布。
- PCL 2 加入了 Electronic Data Processing/Transaction 功能。
- PCL 3于 1984年随着最初的 HP LaserJet 出现。它支持位图字体，并且最大分辨率提高到 300 DPI。其它支持 PCL 3 的产品包括 HP DeskJet 喷墨打印机、HP 2932 系列点阵打印机以及 HP RuggedWriter 2235 点阵打印机。PCL3 仍然在几款击打式打印机上使用以取代过时的 HP 型号。
- PCL 3+（单色）以及 PCL 3c+（彩色）在后来的 HP DeskJet 以及 HP PhotoSmart 上开始使用。
- PCL 3GUI 用在 HP DesignJet 以及一些 DeskJet 系列的打印机产品。它使用与标准 PCL 3 不兼容的一种压缩栅格模式。
- PCL 4 于1985年随着 HP LaserJet II 出现。它加入了宏处理、更大的位图字体及图形。在许多应用程序中仍然在使用 PCL 4。
- PCL 5 于1990年3月随着 HP LaserJet III 发布。它加入了 Intellifont 字体缩放（现在隶属于爱克发·吉华集团的Compugraphics所开发）、轮廓字体以及 HP-GL/2 矢量图形等功能。
- PCL 5e（PCL 5 增强版）于1992年10月随着 HP LaserJet 4 发布，它添加了打印机、PC 以及微软视窗字体间的双向通信功能。
- PCL 5c于1992年在 HP PaintJet 300XL 与 HP Color LaserJet 中增加彩色打印的能力。

## PCL 6 综述

PCL 6 于1995年左右发布，它包括：

- PCL 6 增强版：它是针对如微软视窗这样的图形用户界面进行优化的面向对象页面描述语言，并且进行了压缩以优化性能。这个版本以前称为 PCL XL。
- PCL 6 标准版：等价于 PCL 5e 或者 PCL 5c，以提供向后兼容的能力。
- 字体合成：提供可缩放字体、字体管理以及表格及字体的存储。

PCL 6 增强版的显著特点有容易进行修改以用于未来的 HP 打印机的新的模块化架构、更快的返回应用程序的速度、更快的打印复杂图形的速度、更有效的数据传输、更好的所见即所得的打印效果、更好的打印质量、更好的保真度、完全的向后兼容。在早期的实现中，PCL 6 的市场推广工作做得不好，导致术语上出现了一些混淆。后来 PCL XL 改名为 PCL 6 增强版，但是许多第三方的产品仍然使用旧的名字。有一些产品声称与 PCL 6 增强版兼容，但是可能并不包括 PCL 5 的后向兼容性。PCL 6 增强版主要是微软视窗以及CUPS的打印机驱动程序所使用。由于其结构以及压缩方法的问题，普通的应用程序很少使用这种格式。

PCL 6 增强版是一个类似于 PostScript 的基于堆栈、面向对象的协议。但是它与 PostScript 既可以使用二进制代码、又可以使用文本不同，PCL 6 增强版只能使用二进制代码。PCL 编程文档中的文本的命令及代码都必须用 HP 的 JetASM 这样的工具进行编译才能发送到打印机进行打印。或许是由于 PCL 6 的设计侧重于更小的数据量，因此其运算符灵活性与正交性不如 PostScript。

PCL 6 增强版的设计与微软视窗图形设备接口相匹配。按照这种方式，视窗打印机驱动程序只是简单地传送 GDI 命令，很少对数据进行修改，因此返回应用程序的速度也比较快。微软公司用它的新一代 XPS 格式扩展了这个概念，支持 XPS 的打印机的开发工作正在进行中。这不是一个新的概念，它与 Display Postscript 以及苹果公司的 Quartz 类似，与直接将压缩位图发送到打印机的“GDI 打印机”有所不同。

### PCL 6 类的版本

#### Class 1.1

- 绘图工具：支持直线、圆弧／椭圆／弦、矩形及圆角矩形、多边形、贝塞尔路径、剪切路径、栅格图像、扫描线、栅格运算。
- 色彩处理：支持 1/4/8-位调色板、RGB／灰度色彩空间。支持自定义的半色调 pattern，最多支持 256 种 pattern。
- 压缩：支持行程长度编码。
- 测量单位：英寸、毫米、十分之一毫米。
- 纸张处理：支持自定义或者预定义的纸张，包括常见的 Letter、Legal、A4 等。可以选择从手动进纸、纸匣进纸。纸张可以设置水平或者竖直方向，可以设置纵向、横向以及横向与纵向旋转 180 度。
- 字体：支持位图以及TrueType字体，支持 8 或者 16 位的 code points。所用字符集与 PCL 5 不同。当使用位图字体的时候，许多缩放命令都不能使用。当使用 TrueType 字体的时候，不支持可变长度描述符以及连续块参数。轮廓字体可以旋转、缩放、切变。

#### Class 2.0

- 压缩：添加了 JPEG。
- 纸张处理：纸张可以输出到高达 256 个不同的纸盒中。添加了 A6 以及 Japanese B6 两种预定义的纸张。添加第三个预设纸匣，248 个外部纸匣。
- 字体：可以纵向写字。

#### Class 2.1

- 色彩处理：添加了色彩匹配特性。
- 压缩：添加了 Delta Row 数据压缩。
- 纸张处理：在生成一个新页面时方向、纸张大小可选。添加 B5、JIS 8K、JIS 16K、JIS Exec 纸张大小。

#### Class 3.0

- 色彩处理：允许矢量图形、位图以及文本使用不同的半色调设置。支持自适应的半色调处理。
- 协议：支持 PCL passthrough，允许 PCL 6 数据流使用 PCL 5 的特点。但是，当使用这个特性的时候，无法保留一些 PCL 6 的状态。
- 字体：支持 PCL 字体。

## PJL 综述

PJL（Printer Job Language）是 HP LaserJet IIIsi 上引入的。PJL 添加了打印任务级别的控制，如打印机语言切换、任务切割、环境变量、状态读取、设备存在性检查以及文件系统命令。

PJL以"\x1B%-12345X@PJL \x0D"开始，以"\x1B%-12345X"结束，其中每条指令应当独占一行，指令间需要有carriage return（0x0D）。使用者可以自定义指令。

## 外部链接

- PCLPrinter Yahoo! group专业HP PCL应用开发
- massmind language PCL参考／FAQs
- PageTech专注于HP PCL变换、Intellifont & TrueType字形转换工具及相关技术
- Swiftview提供查看、打印及转换PCL的产品
- RedTitan专业的查看及变换技术
- E.O.E.'s JetASM page包括PCL 6规范及工具。