Instructions conditionnelles
Important
La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.
Pour plus d’informations, veuillez consulter les articles Plateforme d’impression moderne et Guide de conception des applications de support d’impression.
Le langage GPD fournit des instructions conditionnelles de type C qui vous permettent de décrire les dépendances que certains attributs d’imprimante peuvent avoir sur la configuration d’une imprimante. Par exemple, les marges et l’origine du curseur d’une page peuvent dépendre de l’orientation de la page. Les instructions *Switch et *Case vous permettent d’exprimer ces dépendances. Le format de ces instructions est le suivant :
*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } }
FeatureName doit être le nom d’une fonctionnalité spécifiée dans le fichier GPD avec une entrée *Feature. Les noms d’options utilisés doivent être des options associées à la fonctionnalité spécifiée.
Dans un cas pour lequel les marges de page et l’origine du curseur dépendent de l’orientation de la page, les entrées suivantes peuvent être utilisées :
*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)
}
}
}
}
Dans cet exemple, les options de la fonctionnalité PaperSize de l’imprimante dépendent de l’option sélectionnée pour la fonctionnalité Orientation de l’imprimante.
Si vous ne répertoriez pas toutes les options d’une fonctionnalité en tant qu’arguments d’instruction *Case, vous pouvez inclure une instruction *Default, comme en langage C. Si vous n’incluez pas toutes les options et que vous n’incluez pas d’instruction *Default, vous devez évaluer les attributs pertinents (dans l’exemple, *PrintableArea, *PrintableOrigin et *CursorOrigin) ailleurs dans le fichier GPD, avant l’instruction *Switch.
Spécification de plusieurs dépendances
Vous pouvez inclure des instructions *Switch dans les instructions *Case et *Default. Cela vous permet de spécifier plusieurs dépendances comme suit :
*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 {...}
}
Dans cet exemple AttributeX, qui appartient à l’optionE de feature3, dépend à la fois de feature1 et de feature2.
Si l’utilisateur a sélectionné optionA pour feature1, optionD pour feature2 et optionE pour feature3, attributeX est défini sur ValueX.
Si l’utilisateur a sélectionné optionA pour feature1, optionC pour feature2 et optionE pour feature3, attributeX est défini sur ValueY.
Si l’utilisateur a sélectionné optionB pour feature1 et optionE pour feature3, attributeX est défini sur ValueZ. Le paramètre de Feature2 n’est pas pertinent.
Les règles suivantes s’appliquent lors de la spécification de plusieurs dépendances :
Plusieurs dépendances doivent être spécifiées au sein d’une seule entrée *Switch. À l’aide de l’exemple, par exemple, vous ne pouvez pas utiliser une entrée *Switch pour indiquer que feature3 dépend de feature1, puis, dans une instruction *Switch non imbriquée ultérieure, indiquer que feature3 dépend de feature2.
Vous ne pouvez pas spécifier la même fonctionnalité plusieurs fois dans chaque entrée *Switch imbriquée.
Où placer une instruction *Switch
Vous pouvez placer une instruction *Switch aux emplacements suivants dans un fichier GPD :
À l’intérieur d’une instruction *Option
À l’intérieur d’une instruction *Feature
À l’intérieur d’une instruction *Case
À l’intérieur d’une instruction *Default
Au niveau supérieur du fichier (autrement dit, pas à l’intérieur d’un ensemble d’accolades)
Éléments à placer dans les instructions *Switch, *Case et *Default
Dans une entrée *Switch, vous ne pouvez placer que des entrées *Case et *Default.
Les entrées de fichier GPD qui peuvent être placées dans les entrées *Case ou *Default sont appelées des entrées délocalisables. Les types d’entrées GPD suivantes peuvent être relocalisées :
La plupart des attributs d’imprimante, à l’exception des attributs de niveau racine uniquement. (Les attributs généraux doivent être précédés de EXTERN_GLOBAL, sauf si l’entrée *Switch est au niveau racine , en dehors des accolades.)
Entrées *Switch imbriquées, qui vous permettent de spécifier plusieurs dépendances.
Entrées *Command.
*TTFSEnabled?, qui active la substitution de police.
Les types d’entrées GPD suivantes ne peuvent pas être relocalisées :
Attributs de niveau racine uniquement.
*Entrées TTFS pour spécifier la police substituée.
Les entrées *Constraints, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints qui définissent des combinaisons d’options non valides, comme décrit dans Contraintes d’option.
Entrées *Feature et *Option (bien que les attributs de fonctionnalité et les attributs d’option puissent être délocalisés).
Une méthode permettant de déterminer si les entrées ont été placées correctement dans les instructions *Case consiste à supprimer toutes les instructions *Switch et *Case. Si les entrées à l’intérieur des instructions *Case sont correctes, elles le restent après la suppression des instructions *Switch et *Case.
Classement des instructions Switch dans un pilote d’impression V4 dérivé d’un pilote de classe
Le fichier GPD du pilote d’imprimante v4 dérivé doit suivre le même ordre que le pilote de classe de base.
Considérons le scénario suivant. Vous disposez d’un pilote d’imprimante v4 dérivé d’un pilote de classe v4 en définissant RequiredClass sur le pilote de classe dans un fichier *-manifest.ini.
Le fichier GPD du pilote de classe présente l’arborescence Switch suivante :
* Option: A4
1. Switch: Resolution
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
Le pilote d’imprimante v4 dérivé souhaite ajouter le switch MarginSetting, ainsi son fichier GPD présentera l’arborescence Switch suivante :
* Option: A4
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
Notez que Resolution est défini avant InputBin dans le GPD dérivé et que MarginSetting est défini après les deux. Le fichier GPD du pilote d’imprimante v4 dérivé suit le même ordre que celui du pilote de classe de base et ajoute MarginSetting après.
Par exemple, un fichier GPD dérivé incorrectement peut ressembler à ceci :
* Option: A4
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution
* Option: Letter
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution