Rendu d’un travail d’impression

Important

Nous vous recommandons d’utiliser le pilote de classe de boîte de réception IPP 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’imprimante.

Pour plus d’informations, consultez le Guide de conception de l’application de support d’impression.

Les travaux d’impression sont affichés au fur et à mesure de leur création, ou ils sont écrits dans un fichier de pool sous forme d’enregistrements EMF. Dans le cas des enregistrements EMF, le rendu a lieu lorsque le processeur d’impression EMF (localspl.dll) lit les enregistrements. Le rendu se compose d’une série d’appels aux fonctions de dessin GDI en mode utilisateur, en commençant par CreateDC. L’appel à CreateDC est le premier d’une série d’appels d’application qui mènent à une chaîne d’actions impliquant le moteur de rendu graphique (GRE, également appelé GDI en mode noyau) et la DLL graphique d’imprimante.

L’illustration suivante montre l’interaction entre GDI en mode noyau et la DLL graphique d’imprimante après l’appel de CreateDC .

diagramme illustrant l’interaction entre gdi en mode noyau et la dll de graphiques d’imprimante après l’appel de createdc.

  1. Lorsqu’une application appelle la fonction CreateDC pour créer un contexte de périphérique d’imprimante, GDI vérifie si la DLL graphique d’imprimante appropriée est chargée. Si ce n’est pas le cas, GDI charge la DLL et appelle la fonction DrvEnableDriver dans la DLL. La fonction n’est pas appelée à nouveau, sauf si le pilote est rechargé.

  2. Ensuite, GDI appelle la fonction DrvEnablePDEV de la DLL des graphiques d’imprimante afin que le pilote puisse créer un appareil physique instance et retourner les caractéristiques de l’appareil. GDI utilise les informations retournées pour créer une description interne de l’appareil instance.

  3. GDI appelle ensuite la fonction DrvCompletePDEV de la DLL graphique pour fournir un handle GDI à l’appareil instance. La DLL graphique doit utiliser ce handle comme entrée pour certains rappels avec préfixe Eng fournis par le moteur de dessin GDI (voir Services de support GDI).

  4. Une fois que GDI a reçu l’appareil instance handle, il effectue un appel à la fonction DrvEnableSurface de la DLL graphique, qui configure la surface pour le dessin et l’associe à l’appareil physique instance.

  5. Le pilote peut créer une surface de dessin pour l’appareil instance en appelant EngCreateBitmap. Si la surface de dessin est gérée par l’appareil, le pilote peut également appeler EngCreateDeviceSurface.

  6. Si EngCreateBitmap ne peut pas fournir une bitmap suffisamment grande pour contenir une page physique entière, et si le pilote prend en charge le bandeau de pages, EngMarkBandingSurface peut être appelé pour informer GDI que la bande sera utilisée.

  7. Enfin, l’élément EngAssociateSurface doit être appelé pour permettre à GDI d’associer la surface créée à un instance d’appareil spécifié, et pour indiquer à GDI quelles fonctions de dessin DDI graphiques fournies par le pilote (le cas échéant) il doit appeler lorsqu’il dessine sur cette surface particulière.

À ce stade, une surface de dessin a été créée et le rendu peut commencer. Les fonctions que GDI appellent varient selon que la bande est appliquée ou non.

Bande en cours d’utilisation

Pour chaque document à afficher lors de l’utilisation de la bande, GDI appelle les fonctions suivantes dans la DLL des graphiques d’imprimante :

DrvStartDoc

Pour chaque page physique

DrvStartPage

DrvStartBanding

Pour chaque passe de bandes sur une page physique

DrvQueryPerBandInfo

Opérations de rendu

DrvNextBand // Envoyer des données raster pour cette bande, puis effacer la surface pour la réutiliser avec la bande suivante

DrvEndDoc

Bandes non utilisées

Pour chaque document à afficher lorsque la bande n’est pas utilisée, GDI appelle les fonctions suivantes dans la DLL des graphiques d’imprimante :

DrvStartDoc

Pour chaque page physique

DrvStartPage

Opérations de rendu

DrvSendPage // Envoyer des données raster pour la page

DrvEndDoc

À l’exception de DrvQueryPerBandInfo, ces fonctions sont destinées à permettre à la DLL de graphisme d’imprimante d’envoyer des séquences de contrôle au matériel de l’imprimante (en appelant EngWritePrinter) et à effectuer toutes les opérations internes nécessaires pour initialiser ou terminer le traitement d’un document, d’une page ou d’une bande.

La DLL de graphiques d’imprimante est chargée d’envoyer l’image rendue (autrement dit, le contenu de la surface de dessin) à l’imprimante aux moments appropriés (en appelant EngWritePrinter), comme suit :

  • Pour les surfaces bitmap gérées par GDI ou gérées par l’appareil

    La surface de dessin est une bitmap fournie par GDI ou fournie par le pilote. La DLL de graphiques d’imprimante peut raccorder certaines fonctions de dessin (voir Négociation surface). Si le bandeau de pages est utilisé, la fonction DrvNextBand doit envoyer le contenu de la surface de dessin. Si la bande n’est pas utilisée, la fonction DrvSendPage doit envoyer le contenu de la surface de dessin.

  • Pour les surfaces vectorielles gérées par l’appareil

    La surface de dessin se trouve dans l’appareil. La DLL des graphiques d’imprimante raccorde toutes les fonctions de dessin (voir Négociation Surface), et ces fonctions envoient des données d’image à l’imprimante pendant les opérations de rendu. Le regroupement de pages n’est pas utilisé.

Si vous prévoyez que l’exécution d’une fonction DDI graphique fournie par une DLL de graphismes d’imprimante peut prendre plus de cinq secondes, vous devez inclure du code qui appelle EngCheckAbort au moins toutes les cinq secondes pour voir si le travail d’impression doit être arrêté.

Une fois que GDI a appelé DrvEndDoc pour indiquer qu’un document a été entièrement rendu, il appelle DrvDisableSurface. Si DrvEnableSurface appelé EngCreateBitmap, DrvDisableSurface doit appeler EngDeleteSurface.

GDI appelle la fonction DrvDisablePDEV d’une DLL graphique d’imprimante lorsqu’une application appelle DeleteDC.

Si une application appelle la fonction ResetDC lors de l’impression d’un document, GDI crée un contexte d’appareil et appelle la fonction DrvEnablePDEV de la DLL d’imprimante pour le nouveau contexte. Ensuite, GDI appelle la fonction DrvResetPDEV , afin que la DLL graphique puisse mettre à jour le nouveau contexte avec les informations de l’ancien. Ensuite, DrvDisableSurface et DrvDisablePDEV sont appelés pour l’ancien contexte, suivis de DrvEnableSurface pour le nouveau contexte. Enfin, GDI appelle DrvStartDoc et le rendu des CV sur une nouvelle page.

GDI appelle DrvDisableDriver avant de décharger la DLL graphique de l’imprimante.

Si le matériel d’imprimante prend en charge les opérations de dessin qui ne sont pas prises en charge par les fonctions de dessin GDI, la DLL de graphiques d’imprimante peut fournir une fonction DrvDrawEscape .

Une DLL de graphismes d’imprimante peut fournir une fonction DrvEscape si elle est nécessaire pour prendre en charge les opérations de dessin ou de non-dessin qui ne sont pas disponibles via les fonctions GDI. Par exemple, le pilote d’imprimante Microsoft PostScript utilise des échappements pour prendre en charge les points d’injection PostScript. Une application peut également avoir besoin d’obtenir le numéro de téléphone d’un fax. La fonction DrvEscape est également utilisée pour indiquer les opérations prises en charge par la fonction DrvDrawEscape .