条件语句
重要
建议使用 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