Author: 一位神秘的 ZDSoft 老前辈

- 什么是 PDL?

PDL 全称是 Page Description Language(页面描述语言).

PDL 有很多很多种, 具体可以查看 维基百科(英文) 或者 百度百科(中文).

个人理解 PDL 的作用就是描述一段话应该怎么打印在一张纸上, 打印在什么地方. 以及一张图片该如何打印在纸上, 它能够具体的来描述这些做法.

在我们的日常开发中用到了以下几种:

  • PCL
  • PostScript(PS)
  • XPS
  • FAX
  • 注意: 准确的说, FAX 不算是 PDL 的一种, 只是它们各自拥有自己的文件夹, 所以暂且并列为 PDL 方便介绍. 同时一般来说 PCL/PS/XPS 被合称为 Printer, 用以与 FAX 相区分. 同时 FAX 所处文件夹一般是 Printer 文件夹加上 FA 后缀构成.
  • 另外: 简单介绍下, 除了各自正常的 Localize.ini 以外, XPS 因为拥有 XPSPreview 功能, 所以还单独具有 PrvLocalize.ini 文件. 而 FAX 由于具有 PhoneBook(电话本)功能, 所以还单独具有 LocalizePB.ini 文件.

- 什么是 PCL?

PCL 全称是 Printer Command Language(打印机命令语言), 是 惠普(HP) 公司开发的一种 PDL 语言. 具体请查看 维基百科(英文) 或者 百度百科(中文).


- 什么是 PostScript(PS)?

PS 全称 PostScript, 是 Adobe 公司开发的一种 PDL 语言. 详细信息请查看 维基百科(英文) 或者 百度百科(中文).


- 什么是 XPS?

XPS 全称 Open XML Paper Specification(开放XML纸张规格), 是 微软 公司开发的一种 PDL 语言. 具体请查看 维基百科(英文) 或者 百度百科(中文).


- 什么是 PPD?

PPD 全称 PostScript Printer Description(PS打印机描述), 是 Adobe 公司开发的. 看名字里有 PostScript 就知道是跟 PS 有关, 所以也很好解释了为什么只有 PS 当中才有PPD 文件. 详细信息请查看 维基百科(英文).

关于 PPD 的定义:

PostScript Printer Description (PPD) files are created by vendors to describe the entire set of features and capabilities available for their PostScript printers.

意思是"PPD文件由设备制造商们自己书写, 设备制造商可以利用PPD文件来描述他们PS打印机中所有可以使用的特性以及设备功能".

综上可以看出 PPD 主要作用是描述打印机的功能, 而且仅仅是用来描述 PS类型 的打印机的功能. 跟我们作业相关的是在 PS 的功能发生变化的时候, 作为描述的文件, 不要忘记同时对 PPD 文件也进行增删变更.


- 什么是 GPD?

GPD 全称 Generic Printer Description(通用打印机描述), 是微软公司开发的用于 非PS 类型的打印机的. 因为是微软开发的, 所以自然用于微软自家的 XPS, 这也就是我们在开发中只有 XPS 文件夹才有 GPD 文件的原因. 一个作用于 PS打印机, 一个作用于 非PS打印机, 所以 GPD(XPS打印机) 文件的功效与 PPD(PS打印机) 文件的功效非常相似. 详细信息请查看 维基百科(英文).

个人认为 GPD 非常接近 PPD 的功能, 而且语法也比较相似.

补充:
仔细阅读 Unidrv 的 wiki, 会发现其中还有这样的记载:

Unidrv allows the creation of a printer-specific minidriver in the form of a GPD (Generic Printer Description) file.
Unidrv允许使用GPD格式创建一个打印机的特定程序(大意)

Unidrv supports non-PostScript printers driven by PCL and PCL-like page description languages.
Unidrv支持 非PS 打印机, 比如由PCL或者 类PCL 等PDL所驱动的打印机.

由上面的记载内容来看, PCL 中含有 GPD 也并不是什么很奇怪的事情.

顺便看下 MSDN 上的记载:

GPD files are used for creating Unidrv minidrivers.
GPD文件用于创建Unidrv程序.

这也能看出来GPD用于创建Unidrv, 而Unidrv又支持PCL, 那么GPD和PCL是可以产生联系的.

最后还是看这篇 Unidrv 的 wiki 讲讲什么是 Unidrv:

UniDrv (Universal Printer Driver or Unidriver) is a GDI-based Microsoft Windows universal printer driver and architecture for non-PostScript printers.
Unidrv(通用打印机驱动)是微软为 非PS 打印机开发的基于GDI技术的通用打印机驱动结构.

- 什么是 PJL?

PJL 全称 Printer Job Language(打印机作业语言), 是由惠普公司发明的主要用来在 打印作业层级 控制打印机的一种语言. 详细参见 维基百科(英文)

关于 PJL 在维基百科上有这样的说明:

PJL adds job level controls, such as printer language switching, job separation, environment, status readback, device attendance and file system commands.

意思是"PJL添加了作业层级的控制, 比如切换打印机工作语言(例如在PCL和PS之间切换), 独立打印作业控制, 环境变量控制, 设备状态反馈和文件系统控制等功能".

根据以上的内容可以看出, PJL 命令是工作在 PCL, PSPDL 命令更上一层的一种控制语言(因为它可以在不同的 PDL 之间切换). 而 PJL 的主要工作就是切换不同的 PDL 语言, 并且为之设置好各种环境变量, 让具体的 PDL 在工作的时候知道该怎么办.

注意: 讲到这里必须要提到一下, PCLPS 以及 FAX 使用的是 PJL 命令, 而 XPS 使用的是 PTPC 模式, 如下表所示:

PJL 模式 PTPC 模式
PCL XPS
PS -
FAX -

无论是 PJL 还是 PTPC, 都是对打印机进行控制, 运行在 PDL 之上的, 只不过是不同的名字不同的技术而已, 两者的作用其实是类似的.

关于 PJL 命令, 上面已经做了相关介绍. 而关于 PTPC 的总结请移步本站 Print Capabilities & Print Ticket 查看相关介绍.

2016-08-09 22:2246