Udostępnij przez


Obsługa rozmiarów papieru zdefiniowanego przez użytkownika

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).

Rozmiary papieru zdefiniowane przez użytkownika mogą być specyficzne dla pojedynczego serwera wydruku i są zwykle dostosowane dla określonej aplikacji. W związku z tym są one często nazywane niestandardowymi rozmiarami papieru. Administratorzy systemu używają folderu drukowania do definiowania dostosowanych rozmiarów papieru. Jeśli drukarka może obsługiwać dostosowane rozmiary papieru, dostawcy muszą użyć pliku GPD drukarki, aby określić akceptowalny zakres rozmiarów.

Dostępne są dwie metody opisywania dopuszczalnych zakresów rozmiarów dla dostosowanego papieru:

  • Zakresy rozmiarów można określić jawnie.

  • Zakresy rozmiarów można określić względem największego rozmiaru papieru drukarki.

Jawne określanie zakresów rozmiarów papieru

Aby użyć tej metody, funkcja PaperSize pliku GPD musi zawierać wpis *Option z argumentem CUSTOMSIZE. Ten wpis musi zawierać następujące atrybuty opcji:

*MinRozmiar *MaxRozmiar *MaxSzerokośćDrukowalna *MinMarginesLewy *MarginesGórny *MarginesDolny *DrukowanieNaŚrodku? *CursorOrigin *Command Można użyć tych wpisów GPD do tworzenia niestandardowych opisów rozmiarów papieru wyłącznie dla drukarek o następujących cechach:

  • Drukarka obsługuje polecenia umożliwiające jawne wybranie dostosowanych rozmiarów papieru (zazwyczaj przez przeniesienie źródła kursora).

  • Początek kursora pozostaje stały względem lewego górnego rogu papieru dla wszystkich dostosowanych rozmiarów papieru. (Zwykle nie dotyczy to drukowania w trybie poziomym lub drukarek, które są zasilane z środka lub po prawej stronie).

  • Górne i dolne marginesy są niezależne od rozmiaru papieru.

  • Jeśli szerokość papieru jest mniejsza niż suma wartości określonych dla *MinLeftMargin i *MaxPrintableWidth, nie ma prawego marginesu. Oznacza to, że drukarka może drukować na prawej krawędzi papieru.

Parametry polecenia (określone we wpisach *polecenia) można obliczyć w czasie drukowania, jeśli używane są standardowe wyrażenia zmiennych, zazwyczaj obejmujące zmienne PhysPaperLength i PhysPaperWidth. Te zmienne reprezentują rzeczywisty rozmiar papieru żądany dla zadania drukowania, zgodnie z wymaganiami aplikacji.

Określanie zakresów rozmiaru papieru względem największego rozmiaru papieru drukarki

W przypadku drukarek, które nie obsługują cech wymaganych do jawnego określenia dostosowanych zakresów rozmiarów papieru, podano alternatywną metodę, która określa rozmiary papieru w stosunku do największego rozmiaru papieru drukarki.

Aby użyć tej metody, funkcja PaperSize pliku GPD musi zawierać wpis *Option z argumentem CUSTOMSIZE. Ten wpis musi zawierać następujące atrybuty opcji:

*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Polecenie Podczas określania zakresu rozmiarów względem największego rozmiaru papieru drukarki, użyj następujących reguł wyrównania:

  • W przypadku drukarek z bocznym podawaniem papieru marginesy górne i lewe wszystkich rozmiarów papieru muszą być wyrównane.

  • W przypadku drukarek z podajnikiem papieru po prawej stronie, górne i prawe marginesy muszą być wyrównane dla wszystkich rozmiarów papieru.

  • W przypadku drukarek z podawaniem centralnym górne marginesy i górne punkty środkowe wszystkich rozmiarów papieru muszą być wyrównane.

Należy wykonać następujące czynności:

  1. Określ następujące informacje dotyczące największego rozmiaru papieru drukarki:

    • Polecenie wymagane do wybrania największego rozmiaru papieru.
    • Wartości, które byłyby używane dla *PageDimensions, *CursorOrigin, *PrintableOrigin i *PrintableArea największego rozmiaru papieru w wpisach GPD, jak gdyby miały być uwzględnione w pliku GPD. Nie umieścisz jednak tych wpisów w pliku.
  2. Utwórz formuły określające lub obliczające następujące informacje dla każdego dostosowanego rozmiaru papieru względem największego rozmiaru papieru drukarki.

    • Początek i rozmiar obszaru drukowania każdego papieru.
    • Pozycja początkowa kursora dla każdego arkusza papieru.

Formuły dla kroku 2 muszą być wyrażeniami parametrów CUSTOMSIZE oznaczonymi jako , które są określone jako wartości dla poniższych wpisów GPD:

*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeX

Opcja CUSTOMSIZE musi również zawierać *Wpis polecenia, który określa polecenie, które wybiera największy rozmiar drukarki. To polecenie jest wysyłane dla wszystkich niestandardowych rozmiarów papieru, a formuły określają obszar drukowania i pozycję początkową kursora, kontrolując, gdzie drukarka drukuje na rzeczywistym papierze, niezależnie od jego rozmiaru.

Przykładowe obliczenia

W prostym przykładzie załóżmy, że drukarka obsługuje dostosowane rozmiary papieru, które mają marginesy o takim samym rozmiarze jak marginesy największego rozmiaru papieru. Kroki, które należy wykonać, to:

Określ wartości dla największego rozmiaru papieru dla wpisów: *PageDimensions, *CursorOrigin, *PrintableOrigini *PrintableArea. (Nie umieszczaj tych wpisów w pliku GPD).

Określ szerokość każdego z marginesów największego rozmiaru papieru pod względem tych wartości, jak pokazano w następujących pseudoexpressionach:

LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidth TopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth

W tych pseudoexpressionach wartości .x i .y reprezentują składniki poziome i pionowe pary każdego wpisu. W przypadku drukowania poziomego użyj wartości poziomych *PrintableArea i *PrintableOrigin.

Teraz utwórz pseudowyrażenia określające lub obliczające obszary drukowania dla niestandardowych rozmiarów papieru.

*CustPrintableOriginX: %d{LeftMarginWidth}

*CustPrintableOriginY: %d{TopMarginWidth}

*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}

*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}

Zwróć uwagę na użycie dwóch zmiennych standardowych: PhysPaperWidth i PhysPaperLength. W czasie wykonywania te zmienne zawierają długość i szerokość rzeczywistego rozmiaru papieru żądanego przez aplikację.

Należy pamiętać, że te pseudoekspresje są prawidłowe, niezależnie od tego, czy papier jest podawany od lewej, prawej lub środka.

Wstaw wartości rzeczywiste określone w kroku 1 do tych wyrażeń w celu utworzenia wpisów GPD. Przykłady mogą być następujące:

*CustPrintableOriginX:  %d{300}
*CustPrintableOriginY:  %d{300}
*CustPrintableSizeX:   %d{PhysPaperWidth-600}
*CustPrintableSizeY:  %d{PhysPaperLength-600}

Utwórz pseudoexpressiony, które obliczają indeksy pochodzenia kursora. W następujących pseudowyrażeniach *CursorOrigin.x i *CursorOrigin.y stanowią symbole zastępcze dla poziomych i pionowych składników pary wartości początku kursora dla największego rozmiaru papieru.

W przypadku drukarek z podajnikiem po lewej stronie:

*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} Dla drukarek z prawej strony:

*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} Dla drukarek fed centrum:

*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} Wstaw wartości rzeczywiste określone w kroku 1 do tych wyrażeń w celu utworzenia wpisów GPD. Przykłady mogą być (w przypadku papieru podawanego z środka rolki):

*CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY:   %d{180}

Określ wartości dla pozostałych trzech wpisów GPD--*MinSize, *MaxSize i *MaxPrintableWidth. Wartość określona dla *MaxPrintableWidth nie jest rzeczywiście używana dla tej metody, ale analizator wymaga, aby wpis istniał, więc jego wartość może być ustawiona na 1.

Przykład

W poniższym przykładowym segmencie plików GPD opisano dopuszczalne dostosowane rozmiary papieru dla drukarki zasilanej z centrum. W trybie pionowym wszystkie marginesy dla wszystkich niestandardowych rozmiarów papieru wynoszą 300 jednostek głównych (1/4 cala). W przypadku trybu poziomego górne i dolne marginesy to 240 jednostek głównych, natomiast lewe i prawe marginesy to 200 jednostek głównych.

*Option: CUSTOMSIZE
{
  *rcNameID: =USER_DEFINED_SIZE_DISPLAY
  *MinSize: PAIR(4200,9000)
  *MaxSize: PAIR(14040, 21240)
  *MaxPrintableWidth: 14040
  *MinLeftMargin: 100
  *CenterPrintable?: FALSE
  *PageProtectMem: 1692
  *InsertBlock: =PaperConstraints
  *switch: Orientation
  {
    *case: PORTRAIT
    {
       *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+300}
       *CustCursorOriginY:   %d{180}
       *CustPrintableOriginX:  %d{300}
       *CustPrintableOriginY:  %d{300}
       *CustPrintableSizeX:   %d{PhysPaperWidth-600}
       *CustPrintableSizeY:  %d{PhysPaperLength-600}
       *Command: CmdSelect
       {
         *Order: DOC_SETUP.13
 *Cmd: "<1B>&l101a8c1e99F<1B>*p0x0Y<1B>*c0t8064x12528Y"
 }
    }
    *case: LANDSCAPE_CC90
    {
      *switch:  Option20
      {
      *% The 8100 rotates the landscape job 180 degrees if a stapler
      *% is attached, so the staple can be placed in the top left
      *% corner of the document. The printer always rotates the
      *% landscape job, even if stapling is not selected.
        *case: 3KStapler
        {
          *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+200}
          *CustCursorOriginY:   %d{PhysPaperLength}
          *CustPrintableOriginX:  %d{200}
          *CustPrintableOriginY:  %d{240}
          *CustPrintableSizeX:   %d{PhysPaperWidth-400}
          *CustPrintableSizeY:  %d{PhysPaperLength-480}
          *Command: CmdSelect
          {
            *Order: DOC_SETUP.13
            *Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
          }
        }
        *case: MBM5S
        {
          *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+200}
          *CustCursorOriginY:   %d{PhysPaperLength}
          *CustPrintableOriginX:  %d{200}
          *CustPrintableOriginY:  %d{240}
          *CustPrintableSizeX:   %d{PhysPaperWidth-400}
          *CustPrintableSizeY:  %d{PhysPaperLength-480}
          *Command: CmdSelect
          {
            *Order: DOC_SETUP.13
            *Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
          }
        }
        *default
        {
          *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+200}
          *CustCursorOriginY:   %d{21000}
          *CustPrintableOriginX:  %d{200}
          *CustPrintableOriginY:  %d{240}
          *CustPrintableSizeX:   %d{PhysPaperWidth-400}
          *CustPrintableSizeY:  %d{PhysPaperLength-480}
          *Command: CmdSelect
          {
            *Order: DOC_SETUP.13
 *Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
 }
        }
      } *% switch Option20
    } *% case LANDSCAPE_CC90
  } *% switch Orientation
}