印表機命令語言

印表機命令語言（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規範及工具。