Udostępnij przez


Instrukcje warunkowe

Ważne

Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.

Aby uzyskać więcej informacji, zobacz Print Support App v1 and v2 design guide (Przewodnik projektowania aplikacji do obsługi wydruku w wersji 1 i 2).

Język GPD udostępnia instrukcje warunkowe podobne do języka C, które umożliwiają opisywanie zależności, które niektóre atrybuty drukarki mogą mieć w konfiguracji drukarki. Na przykład marginesy i źródło kursora dla strony mogą zależeć od orientacji strony. Instrukcje *Switch i *Case umożliwiają wyrażanie takich zależności. Format tych oświadczeń jest następujący:

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

FeatureName musi być nazwą funkcji określonej w pliku GPD z wpisem *Funkcja . Używane nazwy opcji muszą być opcjami skojarzonymi z określoną funkcją.

Aby wyrazić przypadek, w którym marginesy strony i źródło kursora zależą od orientacji strony, można użyć następujących wpisów:

*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)
            }
        }
    }
}

W tym przykładzie opcje funkcji PaperSize drukarki są zależne od wybranej opcji dla funkcji Orientacja drukarki.

Jeśli nie wymienisz wszystkich opcji funkcji jako *argumenty instrukcji Case, można użyć instrukcji *Default, podobnie jak w języku C. Jeśli nie dołączysz wszystkich opcji i nie dołączysz *instrukcji domyślnej , musisz ocenić odpowiednie atrybuty (w przykładzie *PrintableArea, *PrintableOrigin i *CursorOrigin) w innym miejscu w pliku GPD, poprzedzając instrukcję *Switch .

Określanie wielu zależności

Instrukcje *Switch można umieszczać wewnątrz instrukcji *Case i *Default. Dzięki temu można określić wiele zależności w następujący sposób:

*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 {...} 
    }

W tym przykładzie atrybut AttributeX należący do opcjiE funkcji3 jest zależny od funkcji feature1 i feature2.

Jeśli użytkownik wybrał opcjęA dla funkcji feature1, opcjaD dla funkcji2 i opcjaE dla feature3, atrybutX jest ustawiony na ValueX.

Jeśli użytkownik wybrał opcjęA dla funkcji Feature1, optionC dla feature2 i optionE dla feature3, atrybutX jest ustawiony na ValueY.

Jeśli użytkownik wybrał opcjęB dla funkcji feature1 i opcjiE dla funkcji3, atrybutX jest ustawiony na WartośćZ. Ustawienie funkcji Feature2 jest nieistotne.

Podczas określania wielu zależności mają zastosowanie następujące reguły:

  • Wiele zależności musi być określonych w zakresie pojedynczego wpisu *Przełącznik . Na przykład, nie można użyć wpisu *Switch, aby wskazać, że funkcja3 jest zależna od funkcji1, a następnie w kolejnej, niezagnieżdżonej instrukcji *Switch, aby wskazać, że funkcja3 jest zależna od funkcji2.

  • Nie można określić tej samej funkcji więcej niż raz w każdym zagnieżdżonym wpisie *Przełącz .

Gdzie umieścić instrukcję switch

Instrukcję *Switch można umieścić w następujących lokalizacjach w pliku GPD:

  • Wewnątrz instrukcji *Option

  • Wewnątrz instrukcji funkcji *Feature

  • Wewnątrz instrukcji *Case

  • Wewnątrz *instrukcji 'default'

  • Na najwyższym poziomie pliku (czyli nie wewnątrz nawiasów klamrowych)

Co umieścić wewnątrz *switch, *case i *default statements

W instrukcji *Switch można umieścić tylko wpisy *Case i *Default.

Wpisy pliku GPD, które można umieszczać wewnątrz wpisów *Przypadek lub *Domyślne, są określane jako wpisy przenośne. Następujące typy wpisów GPD są do przeniesienia:

  • Większość atrybutów drukarki, z wyjątkiem atrybutów tylko na poziomie głównym. (Atrybuty ogólne muszą być poprzedzone EXTERN_GLOBAL, chyba że wpis *Przełącznik znajduje się na poziomie głównym — nie w nawiasach klamrowych).

  • Zagnieżdżone wpisy *Przełącznik, które umożliwiają określenie wielu zależności.

  • *Wpisy poleceń.

  • *TTFSEnabled?, umożliwiający podstawianie czcionek.

Następujące typy wpisów GPD nie można przenieść:

  • Atrybuty tylko na poziomie root.

  • *Wpisy TTFS służące do określania czcionki zastępczej.

  • *Ograniczenia, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints to wpisy definiujące nieprawidłowe kombinacje opcji, zgodnie z opisem w Ograniczenia opcjonalne.

  • *Feature i *Option (chociaż atrybuty funkcji i atrybuty opcji są przenośne).

Jedną z metod określania, czy wpisy zostały poprawnie umieszczone wewnątrz *instrukcji Case , jest usunięcie wszystkich instrukcji *Switch i *Case . Jeśli wpisy wewnątrz instrukcji *Case są poprawne, są one nadal poprawne po usunięciu instrukcji *Switch i *Case .

Kolejność instrukcji switch w sterowniku druku w wersji 4 pochodzącym od sterownika klasowego

Plik GPD sterownika drukarki v4 musi zachować tę samą kolejność co sterownik klasy bazowej.

Rozważmy następujący scenariusz. Masz sterownik drukarki v4, który wywodzi się z sterownika klasy v4, ustawiając parametr RequiredClass na sterownik klasy v4 w pliku * '-manifest.ini'.

Plik GPD sterownika klasy ma następującą strukturę przełączników:

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

Pochodny sterownik drukarki w wersji 4 chce dodać przełącznik MarginSetting , więc jego plik GPD będzie miał następujące drzewo przełączników:

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

Należy pamiętać, że Resolution jest ustawiona przed InputBin w pochodnym GPD i MarginSetting jest ustawiana po obu. Plik GPD sterownika drukarki v4 jest zachowany w tej samej kolejności co w sterowniku klasy bazowej, a następnie dodaje MarginSetting.

Na przykład niepoprawnie wyprowadzony plik GPD może wyglądać następująco:

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