Estimado Armando,
FiveWin sí proporciona funciones para controlar la impresión duplex (doble cara) desde la aplicación. No es solo cuestión de la impresora.
Funciones disponibles en FiveWin
1. IsDuplexPrinter()
Verifica si la impresora seleccionada soporta impresión a doble cara. Internamente revisa el flag DM_DUPLEX en la estructura DEVMODE del driver:
2. PrnDuplex( nValue )
Permite obtener y establecer el modo duplex. Si se pasa un parámetro, establece el valor; siempre retorna el valor anterior:
Code: Select all | Expand
HB_FUNC( PRNDUPLEX ) // ( nValue ) --> nOldValue
{
...
dmDuplex = lpDevMode->dmDuplex;
if( hb_pcount() > 0 )
lpDevMode->dmDuplex = ( short ) hb_parni( 1 );
hb_retni( dmDuplex );
...
}
Los valores posibles para nValue son las constantes de Windows:
- DMDUP_SIMPLEX (1) - una sola cara
- DMDUP_VERTICAL (2) - doble cara, volteo por el borde largo
- DMDUP_HORIZONTAL (3) - doble cara, volteo por el borde corto
3. DeviceCapabilities() con DC_DUPLEX
También puede consultar las capacidades del dispositivo directamente, como muestra el ejemplo en samples/misc/devcaps.prg:
Code: Select all | Expand
#define DC_DUPLEX 7
if DeviceCapabilities( "Epson Stylus Color", DC_DUPLEX ) == 0
MsgInfo( "No DC_DUPLEX supported by this driver" )
endif
Resumen
Hay dos condiciones que deben cumplirse:
- La impresora debe soportar duplex (hardware). Esto se verifica con IsDuplexPrinter() o DeviceCapabilities().
- La aplicación debe activar el modo duplex (software). Esto se hace llamando a PrnDuplex( nValue ) antes de imprimir, y luego ResetDC() para aplicar el cambio al DC de la impresora. 0-cite-3
Un ejemplo de uso sería:
Code: Select all | Expand
PRINT oPrn NAME "Mi Documento" PREVIEW
if IsDuplexPrinter()
PrnDuplex( 2 ) // DMDUP_VERTICAL - doble cara borde largo
oPrn:ResetDC()
endif
PAGE
// ... contenido página 1 ...
ENDPAGE
PAGE
// ... contenido página 2 (se imprimirá al reverso) ...
ENDPAGE
ENDPRINT
En conclusión: no basta con que la impresora soporte duplex; su aplicación debe indicarle explícitamente al driver que active ese modo usando las funciones que FiveWin ya provee.