Calculo de nLogPixY en TReport

Calculo de nLogPixY en TReport

Postby RSalazarU » Mon Jun 16, 2014 12:16 am

Hola amigos del foro:

Nuevamente con problemas en los reportes, utilizando la clase TReport

El problema surge cuando cambio de impresora, y creo que es por el calculo del valor de nLogPixY

Tengo un reporte (FACTURA) y segun la impresora imprime:
    PDFCreator: 10 lineas EN UNA SOLA HOJA!!!!
    Canon IP1700: 8 lineas (impresora Chorro de tinta)
    Canon LPB300: 7 lineas (impresora Laser)
    Epson LX300+: 8 lineas (impresora matricial)

La relacion del valor de nLogPixY por impresora (obtenido con oRpt:oDevice:nLogPixelY()) es:
    PDFCreator: 600 (estandar definido por windows)
    Canon IP1700: 600 (estandar definido por windows)
    Canon LPB300: 600 (estandar definido por windows)
    Epson LX300+: 180
Estos valores no estan correctos, ya que si establesco un margen superior de 2 Pulgadas, esto me da 1200Pix en cualquier impresora, lo cual no es correcto!!!

La relacion de RESOLUCION por impresora (obtenido con oRpt:oDevice:nVertRes()) es:
    PDFCreator: 6600
    Canon IP1700: 6411
    Canon LPB300: 6360
    Epson LX300+: 1920

Si mi hoja de papel es de 11 pulgadas de alto, al dividir la RESOLUCION entre las pulgadas me da los siguientes resultados:
    PDFCreator: 600
    Canon IP1700: 582
    Canon LPB300: 578
    Epson LX300+ 174
Estos valores deberia ser establecidos en oRpt:nLogPixY porque son los correctos!!!!

PROBANDO:
para cambiar el valor de oRpt:nLogPixY hago:
Code: Select all  Expand view

oRpt:bInit := {|oRpt| oRpt:nLogPixY := oRpt:oDevice:nVertRes()/11,; //recalculo nLogPixY
                      oRpt:Margin( 2, RPT_TOP, RPT_INCHES ),;       //recalculo margen superior
                      oRpt:Margin( 3, RPT_BOTTOM, RPT_INCHES ) }    //recalculo margen inferior
 


Y asi logro imprimir las 10 lineas EN UNA SOLA HOJA!!!!, ..en las cuatro impresoras.

En base a esto, sera posible cambiar la clase TReport() ????

- Claro que sera algo dificil porque el tamaño de papel es variable (en este ejemplo es de 11 pulgadas)
- El tamaño se lo podria obtener con ::oDevice:SetSize() o ::oDevice:SetPage() o con loa funcion PrnGetSize( ::hDC ) ya que no se lo especifica en ninguna parte de TReport()

Notese tambien, que en este ejemplo solo se corrigio los margenes inferior y superior y cualquie otro valor que se calcule en oRpt:Stabilize (), pero no asi los Fonts y Pen que se recalculan en el metodo oRpt:New()

Bueno, espero tener respuesta de alguien (ya que anteriormente puse 3 o mas post y ninguno me fue respondido)

Atentamente,

Rolando
Cochabamba, Bolivia
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Calculo de nLogPixY en TReport

Postby mastintin » Mon Jun 16, 2014 8:18 am

Algo parecido me pasa a mi con una impresora concreta : una brother hl-5350Dn . El problema esta aquí ( en mi caso , codigo en rprinter.prg )
Code: Select all  Expand view


         //  nAspect        := ::oDevice:nHorzSize() / ::oDevice:nVertSize()
 

No sé si es un bug pero a mi no me detecta bien los valores ::odevice:nVertSize() , ::oDevice:nHorzSize() por lo que naspect no es correcto .

Mi solucion fué esta :
Code: Select all  Expand view


     aSizes:=::oDevice:GetPhySize()
      nAspect:= aSizes[1]/aSizes[2]

    //  nAspect        := ::oDevice:nHorzSize() / ::oDevice:nVertSize()

 


Hago depender la proporción de los valores de tamaño de página y eso siempre sera universal .
De esa misma forma en tu caso deberias coger los valores de tamaño de página a usar y a partir de ellos calcular el resto ...
Saludos.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Calculo de nLogPixY en TReport

Postby RSalazarU » Mon Jun 16, 2014 6:13 pm

Al parecer no entendieron el problema:

El valor 600 es un estandar que windows define (de alguna forma, para cada tipo de impresora).

Por lo tanto si yo quiero establecer el margen superior en 2 pulgadas lo que se hace en oRpt:Margin() es:

Code: Select all  Expand view
::nTopMargin   := Int( ::nLogPixY * nValue )
 


Es decir Int( 600 * 2 ) = 1200 y este valor es para cualquier impresora, sin importar su RESOLUCION, lo que hace que falle el reporte.

Esperaba que Antonio dijera algo, pero ni modo a este paso creo que no avanzaremos en cuanto a los reportes.

Saludos.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 7 guests