命令执行顺序
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。
有关详细信息,请参阅新式打印平台和打印支持应用设计指南。
打印机命令必须以有意义的顺序发送到打印机硬件。 对于 GPD 语言中定义的大多数命令名称,Unidrv 知道何时向打印机发送命令的转义序列。 有两种例外情况:
对于这两种命令类型,都必须指定执行命令的顺序。
命令执行顺序由两部分组成 - 作业部分名称和顺序号。 Unidrv 驱动程序会将每个打印任务分为六个部分。 对于每个部分,Unidrv 按指定顺序向打印机发送分配给该部分的命令。 定义了以下部分:
JOB_SETUP
分配给 JOB_SETUP 部分的命令每个任务只会发送一次。 它们是新作业开始时发出的第一条命令。 这些命令是从 Unidrv 的 DrvStartDoc 函数实现中发送的。
DOC_SETUP
分配给 DOC_SETUP 部分的命令将在发送文档第一页之前发送。 命令是从 Unidrv 的 DrvStartDoc 函数实现中发送的。 (这些命令也会在应用程序调用 Win32 ResetDC 函数后发送。本部分中的命令不得删除已下载的信息,如软字体和图案。)
PAGE_SETUP
分配给 PAGE_SETUP 部分的命令会在每个新的页开始绘制前发送。 这些命令是从 Unidrv 的 DrvStartPage 函数实现中发送的。
PAGE_FINISH
分配给 PAGE_FINISH 部分的命令会在绘图完成后的每一页结束时发送。 这些命令是从 Unidrv 的 DrvSendPage 函数实现中发送的。
DOC_FINISH
分配给 DOC_FINISH 部分的命令将在文档最后一页发送完毕后发送。 这些命令是在 Unidrv 的 DrvEndDoc 函数实现中发送的。 (本部分中的命令不得删除已下载的信息,如软字体和图案。)
JOB_FINISH
分配给 JOB_FINISH 部分的命令每个任务只会发送一次。 它们是作业结束时发送的最后一条命令。 这些命令是从 Unidrv 的 DrvEndDoc 函数实现中发送的。
在这些部分中,命令按照序列号指示的顺序执行。
要指定命令的部分和序列号,请使用 *Order 属性,该属性在命令属性中进行了介绍。 格式为:
*Order: SectionName.SequenceNumber
其中 SectionName 是 JOB_SETUP、DOC_SETUP、PAGE_SETUP、PAGE_FINISH、DOC_FINISH 或 JOB_FINISH 中的一个,而 SequenceNumber 是一个数值。
序列号不必是连续的,但在一个部分内指定的每个号码必须是唯一的。 一个部分中的命令从序列号最小的命令开始执行,直到序列号最大的命令。 例如,以下条目表示 InputBin、PaperSize 和 Resolution 功能的选项被分配到 DOC_SETUP 部分,并按指定顺序发送:
*Feature: InputBin
{
*Option: Auto
{
*Name: "Auto Tray"
*Command: CmdSelect
{
*Order: DOC_SETUP.50
*Cmd: "<1B>(1<010014>"
}
}
...
}
*Feature: PaperSize
{
*DefaultOption: Letter
*Option: Letter
{
*Name: "Letter size"
*Command: CmdSelect
{
*Order: DOC_SETUP.60
*Cmd: "<1B>(g<0300>n<01>r"
}
}
...
}
*Feature: Resolution
{
*DefaultOption: 360dpi
*Option: 360dpi
{
*Name: "360 dpi x 360dpi"
*Command: CmdSelect
{
*Order: DOC_SETUP.70
*Cmd: "<1B>(d<020001>"
}
}
...
}