Uso di funzioni GDI nei processori di stampa

Un set di funzioni GDI in modalità utente viene esportato da Gdi32.dll, per l'uso da parte dei processori di stampa che gestiscono EMF del sistema operativo basato su NT come formato di input. Nella tabella seguente sono elencate le funzioni fornite.

Nome della funzione Descrizione
GdiDeleteSpoolFileHandle Rilascia un handle di file di spooling.
GdiEndDocEMF Completa le operazioni di riproduzione EMF per un documento del processo di stampa.
GdiEndPageEMF Completa le operazioni di riproduzione EMF per una pagina fisica ed espelle la pagina dalla stampante.
GdiGetDC Restituisce un handle al contesto di dispositivo della stampante.
GdiGetDevmodeForPage Restituisce la struttura DEVMODEW di una pagina del documento.
GdiGetPageCount Restituisce il numero di pagine del documento.
GdiGetPageHandle Restituisce un handle a una pagina del documento.
GdiGetSpoolFileHandle Restituisce un handle di file di spooling, obbligatorio come input per le altre funzioni GDI.
GdiPlayPageEMF Riproduce i record EMF associati a una pagina del documento.
GdiResetDCEMF Reimposta il contesto di dispositivo di una stampante.
GdiStartDocEMF Esegue operazioni di inizializzazione per il documento del processo di stampa.
GdiStartPageEMF Esegue operazioni di inizializzazione per una pagina fisica.

PrintDocumentOnPrintProcessor di un processore di stampa EMF deve chiamare GdiGetSpoolFileHandle per ottenere un handle di file di spooling e GdiGetDC per ottenere l'handle del contesto di dispositivo della stampante. Può quindi eseguire i passaggi seguenti:

  • Per ogni documento del processo di stampa, GdiStartDocEMF deve essere chiamato prima che tutti i record EMF vengano riprodotti e GdiEndDocEMF deve essere chiamato dopo che è stato riprodotto l'ultimo record EMF.

  • Affinché ogni pagina fisica venga stampata, è necessario chiamare GdiStartPageEMF prima che tutte le pagine del documento vengano disegnate nella pagina e GdiEndPageEMF deve essere chiamato dopo che l'ultima pagina del documento è stata disegnata nella pagina fisica.

  • Affinché ogni pagina del documento venga disegnata in una pagina fisica, È necessario chiamare GdiGetDevmodeForPage per determinare se il contenuto della struttura DEVMODE è stato modificato dopo il disegno dell'ultima pagina del documento. Se DEVMODE è stato modificato, è necessario avviare una nuova pagina fisica (chiamando GdiEndPageEMF e GdiStartPageEMF) e il contesto di dispositivo della stampante deve essere aggiornato chiamando GdiResetDCEMF. Una pagina del documento viene disegnata in una pagina fisica chiamando prima GdiGetPageHandle per ottenere un handle di pagina del documento e quindi chiamando GdiPlayPageEMF per disegnare la pagina.

Dopo che il processo è stato disegnato completamente, il processore di stampa deve chiamare GdiDeleteSpoolFileHandle.

Se un processore di stampa richiede il numero totale di pagine prima che possa iniziare a stampare pagine (ad esempio per la stampa di pagine in ordine inverso) può chiamare GdiGetPageCount, ma questa funzione non restituisce fino al termine dello spooling e quindi disabilita la possibilità di stampare durante lo spooling.

Se un processore di stampa utilizza queste funzioni GDI, la relativa funzione EnumPrintProcessorDatatypes deve restituire "NT EMF" come tipo di dati supportato, che rappresenta il formato EMF generico di Windows 2000 e versioni successive. Il processore di stampa non deve modificare i record EMF.