FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Imprimir por ambos lados?
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Imprimir por ambos lados?
Posted: Sat May 09, 2026 07:39 PM

Amigos del foro:

Hasta ahora, un cliente me pide imprimir en las dos caras del papel

Entiendo que, nuestra aplicaci贸n crea la vista previa y de la capacidad de la impresora depende la impresi贸n por ambas caras del papel, pero quiero que ustedes me aclaren si estoy equivocado.

Gracias por sus aportes.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Imprimir por ambos lados?
Posted: Sat May 09, 2026 08:04 PM

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:

hb_retl( lpDevMode->dmFields & DM_DUPLEX );

2. PrnDuplex( nValue )

Permite obtener y establecer el modo duplex. Si se pasa un par谩metro, establece el valor; siempre retorna el valor anterior:

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:

#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:

  1. La impresora debe soportar duplex (hardware). Esto se verifica con IsDuplexPrinter() o DeviceCapabilities().
  2. 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 (harbour): Select all Collapse
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.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Imprimir por ambos lados?
Posted: Sun May 10, 2026 03:25 AM

Maestro Antonio:

Excelente y muy clara catedra.

Muchas gracias

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion