条件语句

重要

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

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

GPD 语言提供类似于 C 的条件语句,使你能够描述某些打印机属性在打印机配置上可以具有的依赖项。 例如,页面的边距和光标原点可能取决于页面的方向。 *Switch*Case 语句允许表达此类依赖项。 这些语句的格式如下所示:

*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } }

FeatureName 必须是在 GPD 文件中指定并带有 *Feature 条目的功能 的名称。 使用的选项名称必须是与指定功能关联的选项。

若要表示页边距和光标原点依赖于页面方向的情况,可以使用以下条目:

*Feature: Orientation
{
    *DefaultOption: Portrait
    *Option: Portrait
    {
        *Name: "Portrait"
        *rcIconID: =RC_ICON_PORTRAIT
    }
    *Option: LANDSCAPE_CC90
    {
        *Name: "Landscape"
        *rcIconID: =RC_ICON_LANDSCAPE
    }
}
*Feature: PaperSize
{
    *DefaultOption: Letter
    *Option: Letter
    {
        *Name: "Letter 8.5 x 11 inch"
        *switch: Orientation
        {
            *case: Portrait
            {
                *PrintableArea: PAIR(4800, 6324)
                *PrintableOrigin: PAIR(150, 150)
                *CursorOrigin: PAIR(150,100)
            }
            *case: LANDSCAPE_CC90
            {
                *PrintableArea: PAIR(4860, 6360)
                *PrintableOrigin: PAIR(120, 120)
                *CursorOrigin: PAIR(100,6480)
            }
        }
    }
}

在此示例中,打印机的 PaperSize 功能的选项取决于打印机 方向 功能的所选选项。

如果未将功能的所有选项作为 *Case 语句参数列出,则可以包含 *Default 语句,就像在 C 语言中一样。 如果不包含所有选项,并且不包含 *Default 语句,则必须计算示例 (相关属性 ,即*PrintableArea、*PrintableOrigin*CursorOrigin) 在 GPD 文件中的其他位置,在 *Switch 语句之前。

指定多个依赖项

可以在 *Case 和 *Default 语句中包含 *Switch 语句。 这允许指定多个依赖项,如下所示:

*Feature: feature1 {*Option: optionA {...} *Option: optionB {...}}
*Feature: feature2 {*Option: optionC {...} *Option: optionD {...}}
*Feature: feature3 
    {*Option: optionE 
        {*Switch: feature1 
            {*Case: optionA
                 {*Switch: feature2
                     {*Case: optionD
                         {AttributeX: ValueX}
                      *Default
                         {AttributeX: ValueY}
                     }
                 }
             *Default
                  {AttributeX: ValueZ}
             }
         }
    *Option: optionF {...} 
    }

在此示例中,属于 feature3 的 optionE 的 AttributeX 依赖于 feature1 和 feature2。

如果用户为 feature1 选择了 optionA、feature2 的 optionD 和 feature3 的 optionE,则 attributeX 设置为 ValueX。

如果用户选择了 feature1 的 optionA、feature2 的 optionC 和 feature3 的 optionE,则 attributeX 设置为 ValueY。

如果用户为 feature1 选择了 optionB,为 feature3 选择了 optionE,则 attributeX 设置为 ValueZ。 Feature2 的设置无关紧要。

指定多个依赖项时,以下规则适用:

  • 必须在单个 *Switch 条目的范围内指定多个依赖项。 例如,使用示例时,不能使用 *Switch 条目来指示 feature3 依赖于 feature1,然后在后续的非嵌套 *Switch 语句中指示 feature3 依赖于 feature2。

  • 不能在每个嵌套的 *Switch 条目中多次指定相同的功能。

放置 *Switch 语句的位置

可以将 *Switch 语句放置在 GPD 文件中的以下位置:

  • 在 *Option 语句内

  • 在 *Feature 语句内

  • *Case 语句内

  • *Default 语句内

  • 在文件的顶级 (,即,不在一组大括号内)

在 *Switch、*Case 和 *Default 语句中放置的内容

*Switch 条目中,只能放置 *Case*Default 条目。

可放置在 *Case*默认 条目中的 GPD 文件条目称为可重定位条目。 以下类型的 GPD 条目可重定位:

  • 大多数 打印机属性,仅 根级别属性除外。 (常规属性 前面必须有EXTERN_GLOBAL除非 *Switch 条目位于根级别 - 不在 braces.)

  • 嵌套 *Switch 条目,用于指定多个依赖项。

  • *命令条目。

  • *TTFSEnabled?,启用字体替换。

以下类型的 GPD 条目不可重定位:

  • 仅根级别属性。

  • *用于指定替换字体的 TTFS 条目。

  • *Constraints、*InvalidCombination、*InvalidInstallableCombination、*NotInstalledConstraints 条目,用于定义无效选项组合,如 选项约束中所述。

  • *功能和选项条目 (尽管 功能属性选项属性) 可重定位。

用于确定条目是否已正确放置在 *Case 语句中的一种方法是删除所有 *Switch 和 *Case 语句。 如果 *Case 语句中的条目正确,则在删除 *Switch 和 *Case 语句后,它们仍然正确。

从类驱动程序派生的 V4 打印驱动程序中的 switch 语句排序

派生的 v4 打印机驱动程序的 GPD 文件需要遵循与基类驱动程序相同的顺序。

请考虑以下场景。 你有一个 v4 打印机驱动程序,该驱动程序派生自 v4 类驱动程序,方法是在 *-manifest.ini 文件中将 RequiredClass 设置为类驱动程序。

类驱动程序的 GPD 文件具有以下开关树:

* Option: A4
    1. Switch: Resolution
* Option: Letter
    1. Switch: Resolution
    2. Switch: InputBin

派生的 v4 打印机驱动程序想要添加 MarginSetting 开关,因此其 GPD 文件将具有以下开关树:

* Option: A4
    1. Switch: Resolution
    2. Switch: InputBin
    3. Switch: MarginSetting
* Option: Letter
    1. Switch: Resolution
    2. Switch: InputBin
    3. Switch: MarginSetting

请注意, 分辨率 在派生的 GPD 中的 InputBin 之前设置,在两者之后设置 MarginSetting 。 派生的 v4 打印机驱动程序的 GPD 文件遵循与基类驱动程序相同的顺序,并在后面添加 MarginSetting

例如,错误派生的 GPD 文件可能如下所示:

* Option: A4
    1. Switch: MarginSetting
    2. Switch: InputBin
    3. Switch: Resolution
* Option: Letter
    1. Switch: MarginSetting
    2. Switch: InputBin
    3. Switch: Resolution