Page 1 of 1

Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 3:07 pm
by gsabattino
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

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 3:24 pm
by FranciscoA
Ya lo intentaste asi?

Code: Select all

PrnSetSize(2125, 3250)     //(8.50x2.5)x100 = 2125 mm (13*2.5)*100=3250 mm
Saludos.

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 3:35 pm
by karinha

Code: Select all

#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,""}
 

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 4:26 pm
by gsabattino
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()

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 7:07 pm
by karinha

Code: Select all

// 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

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

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 7:09 pm
by FranciscoA
Giancarlo:
Talvez este trozo de codigo pueda ayudarte. Lo he usado en formatos de distintos tamaños de papel.

Code: Select all

   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 _ RESOLUCION
      nColStep := oPrn:nHorzRes() / 80        // Columnas deseadas
 
Saludos.

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 7:12 pm
by FranciscoA
Upps!! Mientras escribía, Karinha lo posteaba.

Re: Como ajustar impresión por cambio en tamaño del papel

Posted: Wed Apr 29, 2015 9:09 pm
by gsabattino
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...