Conditional Statements (Bedingte Anweisungen)
Wichtig
Die moderne Druckplattform ist die bevorzugte Methode von Windows für die Kommunikation mit Druckern. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.
Weitere Informationen finden Sie unter Moderne Druckplattform und im Designhandbuch für die Drucksupport-App.
Die GPD-Sprache enthält C-ähnliche bedingte Anweisungen, mit denen Sie Abhängigkeiten beschreiben können, die einige Druckerattribute für die Konfiguration eines Druckers aufweisen können. Beispielsweise hängen die Seitenränder und der Cursorursprung für eine Seite möglicherweise von der Ausrichtung der Seite ab. Mit den Anweisungen *Switch und *Case können Sie solche Abhängigkeiten ausdrücken. Das Format dieser Anweisungen lautet wie folgt:
*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } usw. *Case OptionN_Name { } *Default { } }
FeatureName muss der Name eines Features sein, das in der GPD-Datei mit einem *Featureeintrag angegeben ist. Die verwendeten Optionsnamen müssen Optionen sein, die dem angegebenen Feature zugeordnet sind.
Um den Fall auszudrücken, in dem Seitenränder und Cursorursprung von der Ausrichtung der Seite abhängig sind, können die folgenden Einträge verwendet werden:
*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)
}
}
}
}
In diesem Beispiel sind Optionen für die PaperSize-Funktion des Druckers von der ausgewählten Option für die Ausrichtungsfunktion des Druckers abhängig.
Wenn Sie nicht alle Optionen eines Features als *Case-Anweisungsargumente auflisten, können Sie eine *Default-Anweisung wie in der Sprache C einschließen. Wenn Sie nicht alle Optionen einschließen und keine *Default-Anweisung einschließen, müssen Sie relevante Attribute (im Beispiel *PrintableArea, *PrintableOrigin und *CursorOrigin) an anderer Stelle in der GPD-Datei vor der *Switch-Anweisung auswerten.
Sie können *Switch-Anweisungen in *Case- und *Default-Anweisungen einschließen. Auf diese Weise können Sie mehrere Abhängigkeiten wie folgt angeben:
*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 {...}
}
In diesem Beispiel ist AttributeX, das zur OptionE von Feature3 gehört, sowohl von Feature1 als auch von Feature2 abhängig.
Wenn der Benutzer OptionA für Feature1, OptionD für Feature2 und OptionE für Feature3 ausgewählt hat, wird attributeX auf ValueX festgelegt.
Wenn der Benutzer OptionA für Feature1, OptionC für Feature2 und OptionE für Feature3 ausgewählt hat, wird attributeX auf ValueY festgelegt.
Wenn der Benutzer OptionB für Feature1 und OptionE für Feature3 ausgewählt hat, wird attributeX auf ValueZ festgelegt. Die Einstellung für Feature2 ist irrelevant.
Die folgenden Regeln gelten beim Angeben mehrerer Abhängigkeiten:
Mehrere Abhängigkeiten müssen innerhalb des Bereichs eines einzelnen *Switch-Eintrags angegeben werden. Mit dem Beispiel können Sie beispielsweise keinen *Switch-Eintrag verwenden, um anzugeben, dass Feature3 von Feature1 abhängig ist, und geben dann in einer nachfolgenden nicht geschachtelten *Switch-Anweisung an, dass Feature3 von Feature2 abhängig ist.
Sie können das gleiche Feature nicht mehr als einmal innerhalb jedes geschachtelten *Switch-Eintrags angeben.
Sie können eine *Switch-Anweisung an den folgenden Speicherorten in einer GPD-Datei platzieren:
Innerhalb einer *Option-Anweisung
Innerhalb einer *Feature-Anweisung
Innerhalb einer *Case-Anweisung
Innerhalb einer *Default-Anweisung
Auf der obersten Ebene der Datei (d. h. nicht innerhalb einer Gruppe von geschweiften Klammern)
Innerhalb eines *Switch-Eintrags können Sie nur *Case - und *Default-Einträge platzieren.
GPD-Dateieinträge, die innerhalb von *Case- oder *Default-Einträgen platziert werden können, werden als verkettete Einträge bezeichnet. Die folgenden Typen von GPD-Einträgen können wieder verkettet werden:
Die meisten Druckerattribute, mit Ausnahme von nur Attributen auf Stammebene. (Allgemeine Attribute müssen EXTERN_GLOBAL vorangestellt werden, es sei denn, der *Switch-Eintrag befindet sich auf Stammebene – nicht innerhalb von geschweiften Klammern.)
Geschachtelte *Switch-Einträge, mit denen Sie mehrere Abhängigkeiten angeben können.
*Befehlseinträge.
*TTFSEnabled?, was die Schriftartenersetzung ermöglicht.
Die folgenden Typen von GPD-Einträgen können nicht wieder verkettet werden:
Attribute nur auf Stammebene.
*TTFS-Einträge zum Angeben der ersetzten Schriftart.
*Constraints, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints-Einträge, die ungültige Kombinationen von Optionen definieren, wie in Option Constraints beschrieben.
*Feature- und *Option-Einträge (obwohl Featureattribute und Optionsattribute wieder verkettet werden können).
Eine Methode zum Ermitteln, ob Einträge in *Case-Anweisungen richtig platziert wurden, besteht darin, alle *Switch- und *Case-Anweisungen zu entfernen. Wenn die Einträge in den *Case-Anweisungen korrekt sind, sind sie nach dem Entfernen der *Switch - und *Case-Anweisungen immer noch korrekt.
Sortierung von Switch-Anweisungen in einem V4-Drucktreiber, der von einem Klassentreiber abgeleitet ist
Die GPD-Datei des abgeleiteten v4-Druckertreibers muss der gleichen Reihenfolge entsprechen wie der Basisklassentreiber.
Stellen Sie sich folgendes Szenario vor: Sie verfügen über einen v4-Druckertreiber, der von einem v4-Klassentreiber abgeleitet wird, indem Sie RequiredClass auf den Klassentreiber in einer *-manifest.ini-Datei festlegen.
Die GPD-Datei des Klassentreibers weist die folgende Switch-Struktur auf:
* Option: A4
1. Switch: Resolution
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
Der abgeleitete v4-Druckertreiber möchte den MarginSetting-Switch hinzufügen, sodass die GPD-Datei die folgende Switch-Struktur hat:
* Option: A4
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
Beachten Sie, dass die Auflösung festgelegt wird, bevor InputBin in der abgeleiteten GPD und MarginSetting nach beiden festgelegt wird. Die abgeleitete GPD-Datei des v4-Druckertreibers folgt der gleichen Reihenfolge wie der Basisklassentreiber und fügt MarginSetting hinzu.
Eine falsch abgeleitete GPD-Datei kann z. B. wie folgt aussehen:
* Option: A4
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution
* Option: Letter
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution