Page 2 of 2

PostPosted: Wed May 23, 2007 3:23 am
by Armando Picon
El inconveniente es que no siempre sale lo impreso según se espera en todas las impresoras.

La mayor parte de nosotros utilizamos preview en forma general, excepto cuando se trata de impresión de boletas y facturas o registros contables como en Perú que tienen requisitos de copias al carbón que exigen las autoridades tributarias y para lo cual utilizamos las clase TdosPrn.

Por ello es que cada uno, en su afán de conseguir la estandarización de la salida, sin importar la marca o modelo de la impresora, establecimos factores para corregir las salidas. Ese es el motivo de las rutinas que mostramos en el foro y que de alguna manera podrían ayudar a los copartícipes.

Saludos

jacgsoft wrote:Lo que yo hago es simple, tengo una funcion simplemente para PREVISUALIZAR y otra para imprimir.

Para el Preview uso: TPrint(Asi me olvido del modelo de la impresora)
-----------------------

Define Font oFont Name 'Arial' Size 16,25

Print oPrn Preview
Page

oprn:Say(10,10,'ejemplo',oFont)

EndPage



para Impresion directamente a Impresora uso: TdosPrn()
------------------------------------------------------

PostPosted: Tue May 29, 2007 9:57 am
by Carlos Mora
Muy buena la solución de Carlos Vargas. Un solo detalle: no se puede tener una única Cm2Pix porque las resoluciones verticales y horizontales son diferentes. Cero que debe estar diferenciada Cm2PixH y Cm2PixV.

Saludos,

Carlos

PostPosted: Tue May 29, 2007 10:20 am
by Carlos Mora
Antonio,

He aplicado la correción de Carlos Vargas a todas las impresiones y salen *perfectas*. Eso incluye a 3 impresoras laser y un Pdf generado con PdfCreator.

Mi recomendación para el parche al método Cmtr2Pix.

Saludos,

Carlos.

PostPosted: Tue May 29, 2007 4:30 pm
by carlos vargas
Carlos me alegro de que te sirviera, me podria explicar con mas detalle
los de la resolucion :-)

es que ando un poco atontado estos dias :-)

salu2
carlos vargas

PostPosted: Tue May 29, 2007 4:51 pm
by carlos vargas
Carlos
Ya, entendi :-)

Podrias mostrar la modificacion que has hecho?

PostPosted: Tue May 29, 2007 11:15 pm
by Armando Picon
Carlos

¿Cómo aplicaste las correcciones de Carlos Vargas? ¿Puedes compartir tu código con estos "informáticos"?

Saludos

Carlos Mora wrote:Antonio,

He aplicado la correción de Carlos Vargas a todas las impresiones y salen *perfectas*. Eso incluye a 3 impresoras laser y un Pdf generado con PdfCreator.

Mi recomendación para el parche al método Cmtr2Pix.

Saludos,

Carlos.

PostPosted: Wed May 30, 2007 8:11 am
by Carlos Mora
Hola gente,

no he modificado la clase tprinter, sino que he calculado las constantes necesarias para transformar centímetros a pixeles, he cambiado los :CmSay por :Says y en el cálculo de dimensiones de los bitmaps que están en centímetros, multiplico todo por las constantes.
Code: Select all  Expand view
      nKY:= Cm2PixY(oPrint, 1.0)
      nKX:= Cm2PixX(oPrint, 1.0)
      oPrint:SayBitmap( 0, 0, "fondo.bmp", nKX * 21, nKY * 29.7 )
      oPrint:Say( nKY* 7.4, nKX* 4.0, cNombre, oFont )
      oPrint:Say( nKY*10.1, nKX* 4.0, cDatReg, oFont )
      oPrint:Say( nKY*12.7, nKX* 5.0, Empresas->CIF, oFont )
      oPrint:Say( nKY*12.7, nKX*13.7, Str( Year( Empresas->Fecha ), 4 ), oFont )

STATIC FUNCTION Cm2PixX( Self, nCm )
RETURN nCm * 10 * ::nHorzRes() / ::nHorzSize()

STATIC FUNCTION Cm2PixY( Self, nCm )
RETURN nCm * 10 * ::nVertRes() / ::nVertSize()



Creo que el código es bastante claro y sencillo. Si se analiza los valores de resolucion y tamaño para varias impresoras se ven diferencias sutiles, pero por lo visto son significativas.

Si alguien hace experiencias con el tema sería importante que las comparta, a ver si podemos dar una solucion definitiva del tema.

Carlos.

PostPosted: Wed May 30, 2007 1:43 pm
by Kleyber
Hola Carlos Mora,

Una luz en el fin del tunel!!! Gracias por compartir tus experiencias. Voy a hacer algunos testes cambiando la TPrinter con lo que pusiste aca y si tengo algo positivo, les comento. Creo que esto es MUY importante para nosotros que tenemos clientes con distinctas impresoras, usando nuestros reportes hechos en TReport o Tprinter.

Saludos

PostPosted: Wed May 30, 2007 3:18 pm
by Armando Picon
Hola Kleyber

Si las pruebas te salieran bien, sugiero que los compartas con el foro para ver si todos efectúan los ajustes a la clase tprinter y no tengamos que estar haciendo pruebas según las impresoras de los usuarios.

Saludos

Kleyber wrote:Hola Carlos Mora,

Una luz en el fin del tunel!!! Gracias por compartir tus experiencias. Voy a hacer algunos testes cambiando la TPrinter con lo que pusiste aca y si tengo algo positivo, les comento. Creo que esto es MUY importante para nosotros que tenemos clientes con distinctas impresoras, usando nuestros reportes hechos en TReport o Tprinter.

Saludos

PostPosted: Wed May 30, 2007 5:22 pm
by carlos vargas
companeros

Hoy mismo en la tarde le doy una miradita para ver que se pude hacer.

salu2
carlos vargas

PostPosted: Thu May 31, 2007 8:52 am
by Carlos Mora
Carlos,

Hay un detalle que tu sí aplicas, que es la corrección con nXOffset, y que yo no la apliqué.
La función, tal como la puse, transforma de manera correcta cm. a pixels, pero no a coordenadas, que es diferente. Por ejemplo tu función no la podría usar para calcular el tamaño en pixels de una imagen, porque en ese caso las dimensiones no deberían verse afectadas por el nXOffset. No sé si he sido claro, pero creo que con esto vamos a poder homogeneizar las impresiones.
Te reitero que consideres diferenciar en el cálculo cuando las coordenadas son verticales u horizontales, ya que si tenemos diferente resolución en cada dirección saldría mal en sentido vertical.

Por cierto, el usar pixels para diseñar no parece muy apropiado dado que esas unidades son relativas, cambian de impresora a impresora. Lo que he visto en muchas librerías es el uso del twip como unidad de medida. En la clase hay un método para seleccionar twip como unidad de medida.
Es la unidad de medida por defecto en VB y Delphi.

http://en.wikipedia.org/wiki/Twip

PostPosted: Fri Jun 01, 2007 2:32 pm
by carlos vargas
Ok,
Carlos, Kleyber

lamentablemente se me ha complicado la semana :-( pero este fin de semana tendre que trabajar sobre esto, ya que me es urgente :-)

tomare en cuenta sus puntos.

ok, incluso tengo un metodo par ala impresion de bitmap, que como tu indicas tendre que revisar, lo del offset lo checare tambien.

una pregunta que es offset?
ya que lo estaba intentando aplicarlo, pero no estoy muy seguro sobre lo que hace.
(lo que comprendo es que es una especie de correccion)

salu2
carlos vargas

PostPosted: Fri Jun 01, 2007 4:00 pm
by Kleyber
Armando,
Si las pruebas te salieran bien, sugiero que los compartas con el foro para ver si todos efectúan los ajustes a la clase tprinter y no tengamos que estar haciendo pruebas según las impresoras de los usuarios.


Claro que si. Asi que tengas los resultados, envio para ustedes lo que tengo y tambien para Antonio Linares, para que se pueda arreglar en las nuevas versiones de FWH. :D

Carlos Vargas,
lamentablemente se me ha complicado la semana pero este fin de semana tendre que trabajar sobre esto, ya que me es urgente


Sin problemas, mi amigo. Si te puedo ayudar, estoy en el MSN.

Saludos,

PostPosted: Sat Jun 02, 2007 8:43 pm
by carlos.mora
carlos vargas wrote:Ok,
una pregunta que es offset?
ya que lo estaba intentando aplicarlo, pero no estoy muy seguro sobre lo que hace. (lo que comprendo es que es una especie de correccion)


Exacto. xXOffset y nYOffset son valores de ajuste de coordenadas, indicando la posición de inicio del "viewport", es decir del area imprimible. Si revisas los valores que te devuelven los distintos parámetros de la impresora verás que, por ejemplo, teniendo configurada una hoja A4 te dice que el ancho es 198 o 202 o algo parecido. Eso es porque el viewport tiene el tamaño *realmente* disponible. Por ello, como nosotros siempre indicamos las coordenadas referidas al borde de la hoja debemos corregir el cálculo restando ese valor, ya que las coordenadas 0,0 no se refieren a la esquina superior izq. sino a ese punto en particular.
Dicho esto ahora resultan obvias las correciones de coordenadas: se calcula la relación o proporcion pixels-cm, y se les aplica la corrección por el offset siempre y cuando sean coordenadas. Si son dimensiones el nXOffset y nYOffset no deben aplicarse.

Espero que les haya resultado útil el tema. Cuenten como les fue.

Un saludo desde los Madriles,

Carlos.