FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como ajustar impresión por cambio en tamaño del papel
Posts: 102
Joined: Fri Oct 14, 2005 12:03 AM
Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 03:07 PM
Mi Gente... Buen Día...

Hace años desarrolle una aplicación que imprime, por medio de la clase tPrinter, una serie de formularios (diseño gubernamental) en papel Legal (8.5" x 14"... acá lo llamamos "extra-oficio")...
hace poco menos de una semana la dependencia gubernamental en cuestion emitió una circular donde manda a que todos esos formularios se impriman ahora en un tamaño de papel de 8.5" x 13" (acá lo llamamos "oficio")...

Como podrán ver, debo escalar verticalmente la impresión de los formularios para que se impriman completos en un papel que es 2.5cm mas corto...

Ya le añadí a Windows un papel de 8.5" x 13" (Panel de Control ==> Herramientas Administrativas ==> Administrador de Impresión ==> Servidores de Impresion ==> [Equipo] ==> Formularios)
Como hago para saber que constante aplicar al método :SetPage() para indicarle ese tamaño de papel, tomando en cuenta que al ser un tamaño definido por el usuario, puede que en distintos PC's esa constante puede tener diferentes valores...
Ej...
#define DMPAPER_LETTER 1 // Letter 8 1/2 x 11 in
...
#define DMPAPER_LEGAL 5 // Legal 8 1/2 x 14 in
...
#define DMPAPER_OFICIO ???? // 8 1/2 x 13 in

He probado el método :SetSize( nWidth, nHeight ) de la clase tPrinter... pero he estado tirando flechas porque no he encontrado documentación que me diga en que unidades pasan nWidth y nHeight... a duras penas logre que escalara de Legal (8.5" x 14") a Letter (Carta 8.5" x 11")... pero no logro otras medidas por mucho que cambie los valores de nWidth y nHeight...


Agradecido de antemano por la ayuda y/o sugerencias que me puedan dar...

Giancarlo Sabattino
Valencia - Venezuela

FW13.12+xH1.2001+BCC5.51
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 03:24 PM
Ya lo intentaste asi?
Code (fw): Select all Collapse
PrnSetSize(2125, 3250)     //(8.50x2.5)x100 = 2125 mm (13*2.5)*100=3250 mm

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 03:35 PM
Code (fw): Select all Collapse
#include "FiveWin.ch"

FUNCTION PAPEL_LEGAL()

   LOCAL oPrinter, aPaper

   oPrinter = TPrinter():New( 'Meu Documento' , .F., .F., NIL, .F. )

   aPaper = PrnGetPaper( oPrinter )

   IF .NOT. aPaper[3] = 'Legal'

      MsgStop( "Por favor use papel legal, cambie impresora", "Atencion" )

      RETURN( .F. )

   ENDIF

RETURN( .T. )

FUNCTION PrnGetPaper( oPrn )

   LOCAL aPoint := PrnGetSize( oPrn:hDc ), aRecmm := {}, nW := 0
   LOCAL nH := 0, wx := 0

   LOCAL aPapers:={{"DMPAPER_LETTER            " ,  1 , "Letter              " , {216,279} },;
                   {"DMPAPER_LETTERSMALL       " ,  2 , "Letter Small        " , {216,279} },;
                   {"DMPAPER_TABLOID           " ,  3 , "Tabloid             " , {280,432} },;
                   {"DMPAPER_LEDGER            " ,  4 , "Ledger              " , {432,280} },;
                   {"DMPAPER_LEGAL             " ,  5 , "Legal               " , {216,356} },;
                   {"DMPAPER_STATEMENT         " ,  6 , "Statement           " , {140,216} },;
                   {"DMPAPER_EXECUTIVE         " ,  7 , "Executive           " , {184,257} },;
                   {"DMPAPER_A3                " ,  8 , "A3                  " , {297,420} },;
                   {"DMPAPER_A4                " ,  9 , "A4                  " , {210,297} },;
                   {"DMPAPER_A4SMALL           " , 10 , "A4 Small            " , {210,297} },;
                   {"DMPAPER_A5                " , 11 , "A5                  " , {148,210} },;
                   {"DMPAPER_B4                " , 12 , "B4                  " , {250,354} },;
                   {"DMPAPER_B5                " , 13 , "B5                  " , {182,257} },;
                   {"DMPAPER_FOLIO             " , 14 , "Folio               " , {216,330} },;
                   {"DMPAPER_QUARTO            " , 15 , "Quarto              " , {215,275} },;
                   {"DMPAPER_10X14             " , 16 , "10x14 in            " , {254,356} },;
                   {"DMPAPER_11X17             " , 17 , "11x17 in            " , {280,432} },;
                   {"DMPAPER_NOTE              " , 18 , "Note                " , {216,279} },;
                   {"DMPAPER_ENV_9             " , 19 , "Envelope #9         " , {098,225} },;
                   {"DMPAPER_ENV_10            " , 20 , "Envelope #10        " , {105,241} },;
                   {"DMPAPER_ENV_11            " , 21 , "Envelope #11        " , {114,264} },;
                   {"DMPAPER_ENV_12            " , 22 , "Envelope #12        " , {109,279} },;
                   {"DMPAPER_ENV_14            " , 23 , "Envelope #14        " , {127,292} },;
                   {"DMPAPER_ENV_DL            " , 27 , "Envelope DL         " , {110,220} },;
                   {"DMPAPER_ENV_C5            " , 28 , "Envelope C5         " , {162,229} },;
                   {"DMPAPER_ENV_C3            " , 29 , "Envelope C3         " , {324,458} },;
                   {"DMPAPER_ENV_C4            " , 30 , "Envelope C4         " , {229,324} },;
                   {"DMPAPER_ENV_C6            " , 31 , "Envelope C6         " , {114,162} },;
                   {"DMPAPER_ENV_C65           " , 32 , "Envelope C65        " , {114,229} },;
                   {"DMPAPER_ENV_B4            " , 33 , "Envelope B4         " , {250,353} },;
                   {"DMPAPER_ENV_B5            " , 34 , "Envelope B5         " , {176,250} },;
                   {"DMPAPER_ENV_B6            " , 35 , "Envelope B6         " , {176,125} },;
                   {"DMPAPER_ENV_ITALY         " , 36 , "Envelope            " , {110,230} },;
                   {"DMPAPER_ENV_MONARCH       " , 37 , "Envelope Monarch    " , {098,191} },;
                   {"DMPAPER_ENV_PERSONAL      " , 38 , "6 3/4 Envelope      " , {092,165} },;
                   {"DMPAPER_FANFOLD_US        " , 39 , "US Std Fanfold      " , {378,279} },;
                   {"DMPAPER_FANFOLD_STD_GERMAN" , 40 , "German Std Fanfold  " , {216,305} },;
                   {"DMPAPER_FANFOLD_LGL_GERMAN" , 41 , "German Legal Fanfold" , {216,330} } }

   aRecmm = oPrn:Pix2Mmtr(aPoint[1], aPoint[2])

   nW = ROUND(aRecmm[1],0)
   nH = ROUND(aRecmm[2],0)

   for wx=1 to len(aPapers)
      if aPapers[wx,4,1] = nW .AND. aPapers[wx,4,2] = nH
         return {aPapers[wx,1],aPapers[wx,2],aPapers[wx,3]}
      endif
   next

return {"",0,""}


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 102
Joined: Fri Oct 14, 2005 12:03 AM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 04:26 PM

Francisco... Gracias por tu sugerencia...

Te comento que no funcionó... el formato se imprime igual como si se tratara de papel Legal (8.5" x 14")... no se escala verticalmente que es lo que estoy buscando, y lógicamente al ser el papel 2.5cm mas corto se corta el final de la impresión...

de todas formas, por si estoy haciendo algo incompatible con lo que necesito, te copio un resumen del código...

PRINT oPlanilla:oPrn DOC cText;
PREVIEW MODAL
oPlanilla:oPrn:SetPage( DMPAPER_LEGAL ) // Quitando esta linea la clase asume papel carta (8.5" x 11")
oPlanilla:oPrn:SetPortrait()
...
...
PrnSetSize( 2159, 3302 ) // Los valores para nWidth y nHeight están calculados en base a 2.54 cm x pulgada
oPlanilla:oPrn:Preview()
oPlanilla:oPrn:End()

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 07:07 PM
Code (fw): Select all Collapse
// Sample showing how to manage the printer object

#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   local oPrn, oFont
   local nRowStep, nColStep
   local nRow := 0, nCol := 0, n, m

   //oPrn := PrnSetSize( 2100, 1200 ) // To adjust a different printer paper size!
   //oPrn := PrnSetSize( 216, 356 ) // To adjust a different printer paper size!

   oPrn := PrnSetSize( 202 * 10, 289 * 10 ) // To adjust a different printer paper size!

   PRINT oPrn NAME "Testing the printer object from FiveWin" PREVIEW

      if Empty( oPrn:hDC )
         return nil          // Printer was not installed or ready
      endif

      DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -12 OF oPrn

      nRowStep = oPrn:nVertRes() / 20   // We want 20 rows
      nColStep = oPrn:nHorzRes() / 15   // We want 15 cols

      PAGE
         oPrn:SayBitmap( 1, 1, "..\bitmaps\fivewin.bmp" )
         for n = 1 to 20  // rows
             nCol = 0
             oPrn:Say( nRow, nCol, Str( n, 2 ), oFont )
             nCol += nColStep
             for m = 1 to 15
                oPrn:Say( nRow, nCol, "+", oFont )
                nCol += nColStep
             next
             nRow += nRowStep
         next
         oPrn:Line( 0, 0, nRow, nCol )
      ENDPAGE

   ENDPRINT

   oFont:End()      // Destroy the font object

return nil

//----------------------------------------------------------------------------//

procedure AppSys  // XBase++ requirement

return

//----------------------------------------------------------------------------//


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 07:09 PM
Giancarlo:
Talvez este trozo de codigo pueda ayudarte. Lo he usado en formatos de distintos tamaños de papel.

Code (fw): Select all Collapse
   PrnSetSize( nAnchPapel, nAltoPapel ) 

  PRINT oPrn NAME "Documento" 

      oPrn:SetPortrait()

      DEFINE FONT oFont NAME "Arial" SIZE 0, -10 OF oPrn

      nRowStep := oPrn:nVertRes() / nMaxLineas // Lineas deseadas  PRUEBA CON ESTOS CAMBIANDO RESOLUCION
      nColStep := oPrn:nHorzRes() / 80        // Columnas deseadas

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 07:12 PM

Upps!! Mientras escribía, Karinha lo posteaba.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 102
Joined: Fri Oct 14, 2005 12:03 AM
Re: Como ajustar impresión por cambio en tamaño del papel
Posted: Wed Apr 29, 2015 09:09 PM

chicos...

parece que no me he sabido explicar... jeje

el formato ya esta dibujado para papel Legal (8.5" x 14")... y eso tiene varios años funcionando así...
con la nueva normativa el problema no es en si definir el tamaño del papel... yo diría que ese es el problema menor...
lo que quiero evitar es el tener que hacer de nuevo el formato para que encaje en un papel de 8.5" x 13"...
y es allí a donde me gustaría llegar... escalar el formato, que ya esta hecho, para que se imprima en un papel que es 2.5cm mas corto...
claro que si eso no es posible, ni modo... a hacer el formato de nuevo... jeje

Sin embargo, Karinha, con ese ultimo código que posteastes me distes una idea para otra cosa...

Mil Gracias a los dos... y a ver que otra idea surge...

Continue the discussion