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

Post Reply
User avatar
gsabattino
Posts: 100
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

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

Post 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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

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

Post 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,""}
 
João Santos - São Paulo - Brasil
User avatar
gsabattino
Posts: 100
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

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

Post 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()
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

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

Post 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

//----------------------------------------------------------------------------//
 
João Santos - São Paulo - Brasil
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Post by FranciscoA »

Upps!! Mientras escribía, Karinha lo posteaba.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
gsabattino
Posts: 100
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

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

Post 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...
Post Reply