Utilisation des fonctions GDI dans les processeurs d’impression
Un ensemble de fonctions GDI en mode utilisateur est exporté par Gdi32.dll, à des fins d’utilisation par les processeurs d’impression qui gèrent le format EMF du système d’exploitation NT en tant que format d’entrée. Le tableau suivant répertorie les fonctions fournies.
Nom de la fonction | Description |
---|---|
GdiDeleteSpoolFileHandle | Libère un handle de fichier de pool. |
GdiEndDocEMF | Termine les opérations de lecture EMF pour un document de travail d’impression. |
GdiEndPageEMF | Termine les opérations de lecture EMF pour une page physique et éjecte la page de l’imprimante. |
GdiGetDC | Retourne un handle au contexte de périphérique de l’imprimante. |
GdiGetDevmodeForPage | Renvoie la structure DEVMODEW d’une page de document. |
GdiGetPageCount | Renvoie le nombre de pages de document. |
GdiGetPageHandle | Retourne un handle à une page de document. |
GdiGetSpoolFileHandle | Retourne un handle de fichier de pool, requis comme entrée pour les autres fonctions GDI. |
GdiPlayPageEMF | Lit les enregistrements EMF associés à une page de document. |
GdiResetDCEMF | Réinitialise le contexte d’appareil d’une imprimante. |
GdiStartDocEMF | Effectue des opérations d’initialisation pour le document de travail d’impression. |
GdiStartPageEMF | Effectue des opérations d’initialisation pour une page physique. |
PrintDocumentOnPrintProcessor d’un processeur d’impression EMF doit appeler GdiGetSpoolFileHandle pour obtenir un handle de fichier de pool et GdiGetDC pour obtenir le handle de contexte de périphérique de l’imprimante. Ensuite, il peut effectuer les étapes suivantes :
Pour chaque document de travail à imprimer, GdiStartDocEMF doit être appelé avant la lecture des enregistrements EMF et GdiEndDocEMF doit être appelé après la lecture du dernier enregistrement EMF.
Pour chaque page physique à imprimer, GdiStartPageEMF doit être appelé avant que toutes les pages de document soient dessinées sur la page, et GdiEndPageEMF doit être appelé une fois que la dernière page de document a été dessinée sur la page physique.
Pour chaque page de document à dessiner sur une page physique, GdiGetDevmodeForPage doit être appelé pour déterminer si le contenu de la structure DEVMODE a changé depuis le dessin de la dernière page de document. Si le DEVMODE a changé, une nouvelle page physique doit être démarrée (en appelant GdiEndPageEMF et GdiStartPageEMF), et le contexte de périphérique de l’imprimante doit être mis à jour en appelant GdiResetDCEMF. Une page de document est dessinée sur une page physique en appelant d’abord GdiGetPageHandle pour obtenir un handle de page de document, puis en appelant GdiPlayPageEMF pour dessiner la page.
Une fois le travail entièrement dessiné, le processeur d’impression doit appeler GdiDeleteSpoolFileHandle.
Si un processeur d’impression nécessite le nombre total de pages avant de commencer l’impression des pages (par exemple pour l’impression de pages dans l’ordre inverse), il peut appeler GdiGetPageCount, mais cette fonction ne retourne pas tant que le spouleur ne se termine pas et désactive donc la possibilité d’imprimer pendant la mise en file d’attente.
Si un processeur d’impression utilise ces fonctions GDI, sa fonction EnumPrintProcessorDatatypes doit retourner « NT EMF » comme type de données pris en charge, qui représente le format EMF Windows 2000 générique et ultérieur. Le processeur d’impression ne doit pas modifier les enregistrements EMF.