Partager via


Prise en charge des formats de papier définis par l'utilisateur

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 la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Les formats de papier définis par l'utilisateur peuvent être spécifiques à un seul serveur d'impression et sont généralement adaptés à une application spécifique. C'est pourquoi ils sont souvent appelés formats de papier personnalisés. Les administrateurs système utilisent le dossier d'impression pour définir les formats de papier personnalisés. Si une imprimante peut gérer des formats de papier personnalisés, les vendeurs doivent utiliser le fichier GPD de l'imprimante pour spécifier la gamme de formats acceptables.

Deux méthodes permettent de décrire les plages de formats acceptables pour le papier personnalisé :

  • Vous pouvez spécifier les gammes de formats de manière explicite.

  • Vous pouvez spécifier des plages de formats relatives au plus grand format de papier de l'imprimante.

Spécification explicite des plages de formats de papier

Pour utiliser cette méthode, la fonctionnalité PaperSize de votre fichier GPD doit inclure une entrée *Option avec un argument CUSTOMSIZE. Cette entrée doit contenir les attributs d'option suivants :

*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable ? *CursorOrigin *Command Vous pouvez utiliser ces entrées GPD pour créer des descriptions de format de papier personnalisées uniquement pour les imprimantes présentant les caractéristiques suivantes :

  • L'imprimante prend en charge les commandes permettant de sélectionner explicitement des formats de papier personnalisés (généralement en déplaçant l'origine du curseur).

  • L'origine du curseur reste fixe, par rapport au coin supérieur gauche du papier, pour tous les formats de papier personnalisés. (Ce n'est généralement pas le cas pour l'impression en mode paysage ou pour les imprimantes à alimentation centrale ou à alimentation par la droite).

  • Les marges supérieure et inférieure sont indépendantes du format du papier.

  • Si la largeur du papier est inférieure à la somme des valeurs spécifiées pour *MinLeftMargin et *MaxPrintableWidth, il n'y a pas de marge de droite. Cela signifie que l'imprimante peut imprimer jusqu'au bord droit du papier.

Les paramètres de commande (spécifiés dans les entrées *Command) peuvent être calculés au moment de l'impression si des expressions de variables standard sont utilisées, notamment les variables PhysPaperLength et PhysPaperWidth. Ces variables représentent le format de papier réel requis pour le travail d'impression, tel qu'il est spécifié par une application.

Spécification de plages de formats de papier par rapport au plus grand format de papier de l'imprimante

Pour les imprimantes qui ne prennent pas en charge les caractéristiques requises pour spécifier explicitement des plages de formats de papier personnalisés, une autre méthode est fournie, qui spécifie les formats de papier par rapport au plus grand format de papier de l'imprimante.

Pour utiliser cette méthode, la fonctionnalité PaperSize de votre fichier GPD doit inclure une entrée *Option avec un argument CUSTOMSIZE. Cette entrée doit contenir les attributs d'option suivants :

*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command Lors de la spécification d'une plage de formats par rapport au plus grand format de papier de l'imprimante, utilisez les règles d'alignement suivantes :

  • Pour les imprimantes à alimentation par la gauche, les marges supérieure et gauche de tous les formats de papier doivent être alignées.

  • Pour les imprimantes à alimentation par la droite, les marges supérieure et droite de tous les formats de papier doivent être alignées.

  • Pour les imprimantes à alimentation centrale, les marges supérieures et les points centraux supérieurs de tous les formats de papier doivent être alignés.

Les étapes suivantes sont nécessaires :

  1. Déterminez les informations suivantes pour le plus grand format de papier de l'imprimante :

    • La commande nécessaire pour sélectionner le plus grand format de papier.
    • Les valeurs à utiliser pour les entrées GPD *PageDimensions, *CursorOrigin, *PrintableOrigin et *PrintableArea du plus grand format de papier, comme si elles devaient être incluses dans le fichier GPD. Cependant, vous ne placerez pas réellement ces entrées dans le fichier.
  2. Créez des formules qui spécifient ou calculent les informations suivantes pour chaque format de papier personnalisé, par rapport au plus grand format de papier de l'imprimante.

    • L'origine et la taille de la zone imprimable de chaque papier.
    • L'origine du curseur pour chaque papier.

Les formules de l'étape 2 doivent être des expressions de paramètres CUSTOMSIZE, qui sont spécifiées comme valeurs pour les entrées GPD suivantes :

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

L'option CUSTOMSIZE doit également inclure une entrée *Command qui spécifie la commande qui sélectionne le format d'imprimante le plus grand. Cette commande est envoyée pour tous les formats de papier personnalisés, et les formules spécifiées pour la zone imprimable et l'origine du curseur contrôlent l'endroit où l'imprimante imprime sur le papier réel, quel que soit son format.

Exemples de calculs

À titre d'exemple simple, supposons que votre imprimante prenne en charge des formats de papier personnalisés dont les marges sont de la même taille que les marges du plus grand format de papier. Les étapes impliquées sont les suivantes :

Déterminez les valeurs des entrées *PageDimensions, *CursorOrigin, *PrintableOrigin et *PrintableArea du plus grand format de papier. (Ne mettez pas ces entrées dans le fichier GPD.)

Déterminez la largeur de chacune des marges du plus grand format de papier en fonction de ces valeurs, comme illustré dans les pseudo-expressions suivantes :

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

Dans ces pseudo-expressions, .x et .y représentent les composantes horizontale et verticale de la valeur de la paire de chaque entrée. Pour l'impression en mode paysage, utilisez les valeurs paysage pour *PrintableArea et *PrintableOrigin.

Créez maintenant des pseudo-expressions qui spécifient ou calculent les zones imprimables pour des formats de papier non standard.

*CustPrintableOriginX: %d{LeftMarginWidth}

*CustPrintableOriginY: %d{TopMarginWidth}

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

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

Notez l'utilisation des deux variables standard, PhysPaperWidth et PhysPaperLength. Au moment de l'exécution, ces variables contiennent la longueur et la largeur du format de papier réel qui a été requête par une application.

Notez que ces pseudo-expressions sont valables que le papier soit alimenté à gauche, à droite ou au centre.

Insérez les valeurs réelles, déterminées à l'étape 1, dans ces expressions pour créer des entrées GPD. Voici quelques exemples :

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

Créez des pseudo-expressions qui calculent les index d'origine du curseur. Dans les pseudo-expressions suivantes, *CursorOrigin.x et *CursorOrigin.y représentent les composantes horizontale et verticale de la valeur de la paire pour l'origine du curseur du format de papier le plus grand.

Pour les imprimantes à alimentation par la gauche :

*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} Pour les imprimantes alimentées à droite :

*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} Pour les imprimantes à alimentation centrale :

*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} Insérez les valeurs réelles, déterminées à l'étape 1, dans ces expressions pour créer des entrées GPD. Exemples possibles (pour le papier à alimentation centrale) :

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

Spécifiez les valeurs des trois entrées GPD restantes : *MinSize, *MaxSize et *MaxPrintableWidth. La valeur spécifiée pour *MaxPrintableWidth n'est pas réellement utilisée pour cette méthode, mais l'analyseur syntaxique exige que l'entrée existe, de sorte que sa valeur peut être fixée à 1.

Exemple

L'exemple de segment de fichier GPD suivant décrit les formats de papier personnalisés acceptables pour une imprimante à alimentation centrale. En mode portrait, toutes les marges de tous les formats de papier personnalisés ont une taille de 300 unités principales (1/4 de pouce). En mode paysage, les marges supérieure et inférieure sont de 240 unités maîtres, tandis que les marges gauche et droite sont de 200 unités maîtres.

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