命令执行顺序

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (PSA) ,在 Windows 10 和 11 中自定义打印体验,以便进行打印机设备开发。

有关详细信息,请参阅 打印支持应用设计指南

打印机命令必须按有意义的顺序发送到打印机硬件。 对于 GPD 语言中定义的大多数命令名称,Unidrv 知道何时将命令的转义序列发送到打印机。 有两种例外情况:

选项选择命令

打印机配置命令

对于这两种命令类型,必须指定命令的执行顺序。

命令执行顺序由两个组件组成 -- 一个作业节名称和一个序列顺序号。 Unidrv 驱动程序将每个打印作业划分为六个部分。 对于每个节,Unidrv 按指定的顺序向打印机发送分配给节的命令。 定义了以下部分:

JOB_SETUP
为每个作业发送一次分配给 JOB_SETUP 节的命令。 它们是新作业开始时发送的第一个命令。 这些命令是从 Unidrv 的 DrvStartDoc 函数实现中发送的。

DOC_SETUP
分配给DOC_SETUP节的命令在发送文档的第一页之前发送。 命令从 Unidrv 的 DrvStartDoc 函数实现中发送。 (应用程序调用 Win32 ResetDC 函数后也会发送这些命令。本部分中的命令不得删除下载的信息,例如软字体和 patterns.)

PAGE_SETUP
分配给 PAGE_SETUP 节的命令在每个新页面的开头发送,然后开始绘制。 这些命令是从 Unidrv 的 DrvStartPage 函数实现中发送的。

PAGE_FINISH
绘制完成后,将在每个页面末尾发送分配给 PAGE_FINISH 节的命令。 这些命令是从 Unidrv 的 DrvSendPage 函数实现中发送的。

DOC_FINISH
分配给DOC_FINISH节的命令在发送文档的最后一页后发送。 命令是从 Unidrv 的 DrvEndDoc 函数实现中发送的。 本部分中的 (命令不得删除下载的信息,例如软字体和 patterns。)

JOB_FINISH
为每个作业发送一次分配给 JOB_FINISH 节的命令。 它们是作业结束时发送的最后一个命令。 这些命令是从 Unidrv 的 DrvEndDoc 函数实现中发送的。

在每个节中,命令按其序列号指示的顺序执行。

若要指定命令的节和序列号,请使用命令属性中所述的 *Order属性。 格式为:

*OrderSectionName.SequenceNumber

其中 SectionName 是JOB_SETUP、DOC_SETUP、PAGE_SETUP、PAGE_FINISH、DOC_FINISH或JOB_FINISH之一, SequenceNumber 是数值。

序列号不必是连续的,但节中指定的每个数字必须是唯一的。 节中的命令从序列号最低的节执行到序列号最高的节。 例如,以下条目指示 InputBinPaperSizeResolution 功能的选项分配给 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>"
        }
    }
    ...
}