Comprendre les données renvoyées par GetDeviceCaps pour les imprimantes

Lorsqu'on cherche à contrôler ses impressions au lieu d'utiliser des composants spécialisés, une question revient régulièrement parmi les utilisateurs de Delphi: comment connaître la taille de la page. Ce n'est que le début, marges, résolution, taille physique, taille logique, aspect des pixels... l'API GetDeviceCaps de Win32 permet d'obtenir nombre de grandeurs pas toujours claires au premier abord. Voici leurs relations.

L'API GetDeviceCaps

L'API GetDeviceCaps sert très généralement à interroger les caractéristiques renvoyées par le pilote d'un périphérique disposant d'une surface de rendu. Son premier paramètre, handle est le hande Windows de l'imprimante, obtenu depuis la fonction Printer. Le second identifie la grandeur dont on souhaite obtenir la valeur, comme dans cet exemple:

  [...]
  uses Printers, // Pour la fonction Printer
       Windows ; // Pour la fonction GetDeviceCaps
  [...]
  var resx : Integer ;
  [...]
  resx := GetDeviceCaps (Printer.handle, LOGPIXELSX) ;

Elle est utilisable tant avec des périphériques réels (traceur vectoriel, écran bitmap, imprimante bitmap, appareil photo bitmap, flux de caractères (penser au pilote d'impression texte générique)), que virtuels (imprimantes fax ou PDF, métafichier simple ou étendu, ou liste d'affichage).

Pour tous ces périphériques, l'API dispose de multiples paramètres, mais dans le cas de la production de pages par programme, les seuls qui nous concernent sont les diverses dimensions de la page et les résolutions d'impression. Le schéma suivant illustre la relation de toutes ces valeurs.

Schéma des paramètres de dimension de l'API GetDeviceCaps

Les valeurs renvoyées par GetDeviceCaps

  • Les valeurs LOGPIXELSX et LOGPIXELSY sont les résolutions horizontale et verticale en pixels par pouce (1 pouce = 25,4 mm).
  • Les valeurs HORZRES et VERTRES sont les dimensions horizontale et verticale de la zone d'impression utile, en pixels.
  • Les valeurs HORZSIZE et VERTSIZE sont les dimensions horizontale et verticale de la zone d'impression utile, en millimètres
  • Les valeurs PHYSICALHEIGHT, PHYSICALWIDTH, PHYSICALOFFSETX et PHYSICALOFFSETY sont respectivement les dimensions et les marges haute et gauche de la page, en pixels.

La zone d'impression recouvre en théorie toujours une partie de la surface physique, jusqu'à la recouvrir exactement sur de très rares imprimantes. En pratique, l'expérience montre que certains pilotes, par exemple pour la production de PDF ou de télécopies, ont des surfaces imprimables qui peuvent dépasser la surface "physique" définie par PHYSICAL{WIDTH|HEIGHT}, avec des marges de droite et du bas qui sont alors négatives, bien que la spécification du SDK Win32 précise que ceci ne doit pas arriver. C'est donc un cas dont la prise en compte est nécessaire.

Les relations entre les résultats de GetDeviceCaps

Les marges du bas et de droite ne sont pas disponibles par cette API, mais peuvent être calculées en soustrayant des dimensions physiques les marges physiques et les dimensions de la zone d'impression.

Certaines valeurs fournies par cette API sont redondantes, et peuvent se recalculer :

HORZRES = round (HORZSIZE * LOGPIXELSX / 25.4) ;
VERTRES = round (VERTSIZE * LOGPIXELSY / 25.4)  ;

Get started with Drupal 7

Marques les plus citées

toutes les marques

acheter sur OSInet

Accès direct

Recherche

Le mot du jour

BSOD

Blue Screen Of Death

in | |

cf Ecran bleu 

Syndiquer le contenu

Dernières définitions

Chrome - Chromium - digitaalisen kuilun - ghetto sharding - HTTP - MongoDB - PNaCl - QUIC - Skia - SPDY

Un mot au hasard

fibre noire  

Alertes CERTA