撰寫 PCL XL GPD 檔案
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
本節提供撰寫 PCL XL GPD 檔案的一般資訊,例如 GPD 檔案應包含哪些檔案、如何在 GPD 檔案中啟用 PCL XL,以及如何在 PCL XL 數據流中排序 PCL XL 命令。
Windows 驅動程式套件 (WDK) 包含 \src\print\mini\mdw\vector\pcl6 目錄中的範例 PCL XL GPD 檔案 (p6sample.gpd)。 (某些語言和國家/地區可能無法使用此資源。
要包含的檔案
若要撰寫以 GPD 為基礎的迷你驅動程式,請使用預處理器指示詞 *Include 來指定下列 GPD 檔案:
pclxl.gpd -- 包含 PCL XL 運算子的巨集,讓您可以撰寫更容易閱讀和瞭解的 GPD 程式代碼。 例如,您可以撰寫 =BeginPage ,而不是 <43>。
p6disp.gpd -- 包含pcl5eres.dll和pclxl.dll中包含的資源字串巨集。
p6font.gpd -- 包含pclxl.dll中包含的字型巨集。
pjl.gpd -- 包含 PJL 命令的巨集。
除了上述檔案之外,還包含標準 GPD 檔案、stdnames.gpd 和 ttfsub.gpd。
下列範例示範如何將這些檔案包含在 GPD 檔案中。
*Include: stdnames.gpd
*Include: ttfsub.gpd
*Include: pclxl.gpd
*Include: p6disp.gpd
*Include: p6font.gpd
*Include: pjl.gpd
在 GPD 檔案中啟用 PCL XL 支援
若要啟用 PCL XL 向量支援,您只需要設定 *Personality 屬性。 這會以下列方式完成:
*Personality: = PERSONALITY_PCLXL
PERSONALITY_PCLXL常數定義於 stdnames.gpd 中。
WDK 中包含範例 GPD 檔案 p6sample.gpd,以協助開發人員建立新的 PCL XL 迷你驅動程式。
PCL XL 命令排序
命令的順序在 PCL XL 中比 PCL-5 更為重要。 PCL 數據流中的小型錯誤不太可能影響作業,但 PCL XL 命令只有在數據流的某些點才有效,因此 PCL XL (PCL-6) 中的任何錯誤都會發出 XL 錯誤頁面。 例如,在傳送 BeginSession 運算符之前,您無法傳送 BeginPage 運算符。
PCL XL 資料流的格式類似如下。 (顯示的縮排僅用於強調這些運算子成對的點。
PJL commands
BeginSession
OpenDataSource
BeginPage
<page data>
EndPage
CloseDataSource
EndSession
PJL commands
PCL XL 數據流前面加上 PJL 命令,後面接著 PJL 命令。 PCL XL 數據流本身以 BeginSession 運算符開頭,並以 EndSession 運算子結尾。 在該組運算符內,還有另一組運算符:OpenDataSource 和 CloseDataSource。 在該運算符組內,有一或多個 BeginPage/EndPage 運算符組,每個傳送至印表機的頁面各一對。 描述如何轉譯個別頁面的頁面數據,會以 BeginPage/EndPage 運算符組括住。
如需所有 PCL XL 運算子的詳細資訊,請參閱 PCL XL 功能參考通訊協定類別 2.0 檔。
PCL XL GPD 檔案的其他資訊
在 PCL XL GPD 檔案中,*FontFormat 屬性名稱會指定下載字型的方式,限制為兩個值:HPPCL_OUTLINE和HPPCL_RES。 第一個值表示 Unidrv 是下載 TrueType 大綱數據。 第二個值表示 Unidrv 是下載點陣圖軟字型數據。
IHV 可以藉由限制要下載的字型數目,或限制在指定字型中下載的字元數,來降低印表機記憶體使用量。 *MinFontID 和 *MaxFontID 屬性名稱可用來通知 Unidrv 下載其識別元位於這些值所指定範圍內的軟字型。 同樣地,會使用 *MinGlyphID 和 *MaxGlyphID 屬性名稱來限制指定字型中的字元數目,以下載至特定範圍內的字元數目。
Unidrv 的運作方式是假設每個 GPD 檔案都包含自己的任一矩陣。 此外,也建議每個裝置都有自己的任一矩陣。 在 *功能:Dither 自定義功能中指定了任一矩陣。