FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Calculo de nLogPixY en TReport
Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
Calculo de nLogPixY en TReport
Posted: 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)[/list:u]

    La relacion del valor de nLogPixY por impresora (obtenido con oRpt: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[/list:u]
      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:nVertRes()) es:
        PDFCreator: 6600
        Canon IP1700: 6411
        Canon LPB300: 6360
        Epson LX300+: 1920[/list:u]

        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[/list:u]
          Estos valores deberia ser establecidos en oRpt:nLogPixY porque son los correctos!!!!

          PROBANDO:
          para cambiar el valor de oRpt:nLogPixY hago:
          Code (fw): Select all Collapse
          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 ::SetSize() o ::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
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Calculo de nLogPixY en TReport
Posted: Mon Jun 16, 2014 08: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 (fw): Select all Collapse
         //  nAspect        := ::nHorzSize() / ::nVertSize()

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

Mi solucion fué esta :
Code (fw): Select all Collapse
     aSizes:=::oDevice:GetPhySize()
      nAspect:= aSizes[1]/aSizes[2]

    //  nAspect        := ::nHorzSize() / ::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.
Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
Re: Calculo de nLogPixY en TReport
Posted: Mon Jun 16, 2014 06: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 (fw): Select all Collapse
::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.

Continue the discussion