Uso de funciones GDI en procesadores de impresión
Un conjunto de funciones GDI en modo de usuario se exporta mediante Gdi32.dll, para su uso por procesadores de impresión que controlan EMF del sistema operativo basado en NT como formato de entrada. En la tabla siguiente se enumeran las funciones que se proporcionan.
Nombre de función | Descripción |
---|---|
GdiDeleteSpoolFileHandle | Libera un identificador de archivo de cola. |
GdiEndDocEMF | Completa las operaciones de reproducción de EMF para un documento de trabajo de impresión. |
GdiEndPageEMF | Completa las operaciones de reproducción de EMF para una página física y expulsa la página de la impresora. |
GdiGetDC | Devuelve un identificador al contexto del dispositivo de la impresora. |
GdiGetDevmodeForPage | Devuelve la estructura DEVMODEW de una página de documento. |
GdiGetPageCount | Devuelve el número de páginas del documento. |
GdiGetPageHandle | Devuelve un identificador a una página de documento. |
GdiGetSpoolFileHandle | Devuelve un identificador de archivo de cola, necesario como entrada para las otras funciones de GDI. |
GdiPlayPageEMF | Reproduce los registros EMF asociados a una página de documento. |
GdiResetDCEMF | Restablece el contexto del dispositivo de una impresora. |
GdiStartDocEMF | Realiza operaciones de inicialización para el documento de trabajo de impresión. |
GdiStartPageEMF | Realiza operaciones de inicialización para una página física. |
El printDocumentOnPrintProcessor de un procesador de impresión EMF debe llamar a GdiGetSpoolFileHandle para obtener un identificador de archivo de cola y GdiGetDC para obtener el identificador de contexto del dispositivo de la impresora. A continuación, puede realizar los pasos siguientes:
Para cada documento de trabajo de impresión, se debe llamar a GdiStartDocEMF antes de reproducir los registros EMF y se debe llamar a GdiEndDocEMF después de reproducir el último registro EMF.
Para que se imprima cada página física, se debe llamar a GdiStartPageEMF antes de que se dibuje cualquier página de documento en la página y se debe llamar a GdiEndPageEMF después de que se haya dibujado la última página del documento en la página física.
Para que cada página de documento se dibuje en una página física, se debe llamar a GdiGetDevmodeForPage para determinar si el contenido de la estructura DEVMODE ha cambiado desde la última página del documento. Si el DEVMODE ha cambiado, se debe iniciar una nueva página física (llamando a GdiEndPageEMF y GdiStartPageEMF) y el contexto del dispositivo de la impresora debe actualizarse llamando a GdiResetDCEMF. Una página de documento se dibuja en una página física llamando primero a GdiGetPageHandle para obtener un identificador de página de documento y, a continuación, llamando a GdiPlayPageEMF para dibujar la página.
Una vez que el trabajo se haya dibujado por completo, el procesador de impresión debe llamar a GdiDeleteSpoolFileHandle.
Si un procesador de impresión requiere el recuento total de páginas antes de que pueda empezar a imprimir páginas (por ejemplo, para imprimir páginas en orden inverso), puede llamar a GdiGetPageCount, pero esta función no devuelve hasta que finaliza la cola y, por tanto, deshabilita la capacidad de imprimir mientras se pone en cola.
Si un procesador de impresión usa estas funciones GDI, su función EnumPrintProcessorDatatypes debe devolver "NT EMF" como un tipo de datos compatible, que representa el formato EMF genérico de Windows 2000 y versiones posteriores. El procesador de impresión no debe modificar los registros EMF.