Imprimiendo con print y resolucion de pagina

Imprimiendo con print y resolucion de pagina

Postby jfafive » Wed Jun 30, 2010 5:39 pm

Hola amigos,

Tengo un listado desarrollado con la clase Print como muestra mi codigo:
Code: Select all  Expand view

PRINT oPrn PREVIEW
PAGE
.....
ENDPAGE
ENDPRINT
 


Lo cierto es que todo iba bien. Ya habia ajustado las coordenadas fila y columna en la sentencias
Code: Select all  Expand view
oPrn:Say(...)


Pero ho mi sorpresa cuando en casa del cliente veo que el listado sale mucho mas pequeño en proporción al tamaño de la hoja que es A4.

Para aumento de mi horror compruebo que al cambiar de impresora predeterminada bien sea fisica o pdf, el tamaño de mi listado siempre cambia con respecto al tamaño de la hoja. Tengo que volver a mi casa y solo funciona bien pues las coordenadas parece que solo sirven para mi impresora.

Ahora la pregunta clave ¿existe algun modo de ajustar las coordenadas de oprn:Say() para que el listado siempre salga igual en una hoja de A4, aunque se cambie de impresora?

Lo he intentado con
Code: Select all  Expand view

nRow := oPrn:nVertRes() / 20
nCol := oPrn:nHorzRes() / 15
 


Pensabe que si incremento por ejemplo nRow += 50 siempre es proporcional según el cambio de impresora. Y la posición se mantiene relativa.
Pero tampoco! :cry: :cry: :cry:
No me digan que tengo que generar un listado por cada tipo de resolución o impresora porfavor. :shock:
La verdad es que no se como hacerlo. :cry: :cry: :cry:

Ayudaaaaa.
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Imprimiendo con print y resolucion de pagina

Postby Armando » Wed Jun 30, 2010 6:44 pm

Javier:

El problema es que oPrn:Say(...) utiliza la resolución en pixeles de cada impresora
por eso te varía de impresora a impresora, porque las resoluciones de cada una de
ellas no es la misma.

Intenta con

oPrn:CmSay(...)

De esta forma se imprime en cms no en píxeles.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Imprimiendo con print y resolucion de pagina

Postby anserkk » Thu Jul 01, 2010 5:11 am

This topic may be useful to you
viewtopic.php?f=3&t=17943

Regards
Anser
User avatar
anserkk
 
Posts: 1329
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: Imprimiendo con print y resolucion de pagina

Postby jfafive » Thu Jul 01, 2010 2:02 pm

Armando, Anserkk,

Gracias por vuestra ayuda.
Tras leer vuestros consejos, he hecho una prueba con el uso de Cmsay()

Code: Select all  Expand view

PRINT oPrn NAME ;
  OemToAnsi( "Listado de facturación." ) PREVIEW

DEFINE FONT oFont NAME "Arial" SIZE 23, 30 OF oPrn

PAGE

oPrn:CmSay( 4, 4, "Nº FACTURA " )

ENDPAGE

ENDPRINT
 


Con este ejemplo tan facil, parece que el descuadre ya no es tan grave como antes. Pero a pesar de que trabajo
en centimetros, sigue cambiando la posición del texto según la impresora que selecciono.

Como os he dicho, parece que ahora el desajuste no es tan grave. Pero no me da tranquilidad. Me parece que nuestro amigo James Bott hablaba de los OFFSET según he seguido en el link de anserkk. ¿serán esos offset la causa?. Parece que hay que calcularlos según cada impresora, lo que me lleva al principio otra vez, al temor de tener que hacer listados para cada tipo de impresoras en lugar de uno universal.

¿podeis decirme si hay alguna otra solución para tener un listado que salga en A4 sea cual sea la impresora?

Gracias y un saludo.
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Imprimiendo con print y resolucion de pagina

Postby antolin » Thu Jul 01, 2010 6:17 pm

jfafive

Es posible que tenga algo que ver con el procesador de impresión, y cómo este envía los datos a la impresora. Lo mismo lo tienes puesto en EMF en las propiedaddes de impresión, prueba a ponerlo en RAW, pues RAW no modifica los datos como lo hace el EMF.
Peaaaaaso de foro...
antolin
 
Posts: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Imprimiendo con print y resolucion de pagina

Postby Lautaro » Thu Jul 01, 2010 7:20 pm

Hola,

Pues yo uso print y sin problemas con la proporcion asi :

Code: Select all  Expand view

// Obtengo el ancho y alto de cada linea/columna en pixeles.
nAltoRow   := oprinter:nvertres()/65
nAnchoCol :=  oprinter:nhorzres()/170

// Luego para imprimir uso :

oPrinter:say(nAltoRow*nRow,nanchoCol*nCol,"lo que quiero imprimir",oFont4)

// donde nRow es la fila y  ncol es la columna en mi matriz de 65 filas x 170 columnas
 


Una correccion que suelo hacer dependiendo del tamaño del informe es restarle 30 pixeles a la resolucion horizontal y vertical antes de divider por el numero de filas/columnas para evitarme el margen inutilizable de la hoja.

Saludos,

Lautaro Moreira
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: Imprimiendo con print y resolucion de pagina

Postby antolin » Mon Jul 05, 2010 6:10 am

Me ha he dado cuenta de un detalle que a lo mejor te puede ayudar, pues justamente estoy realizando un impreso con TPrinter.

Lo que hago es dibujar primero el impreso a mano en un folio y despues mido las ditancias con una regla para poner los textos en su sitio con oPrn:CmSay. (y las lineas y cajas con oPrn:Box y oPrn:Line) y cuando imprimo, todo va a su sitio. He probado con dos impresoras diferentes y no tengo problemas. Entonces, repasando el código me he dado cuenta de una cosa que a lo mejor se te ha pasado a ti: Y es que lo primero que hago despues de definir el TPrinter con PRINTER oPrn NAME ... PREVIEW es definir el tipo depágina con oPrn:SetPage(9) para DIN A4 y la orietación con oPrn:SetPortrait() o oPrn:SetLandScape().

A lo mejor tienes que definir en que tipo de folio quieres imprimir para que no tengas problemas de cambios de impresora. Espero que te ayude.

Un saludo.
Peaaaaaso de foro...
antolin
 
Posts: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Imprimiendo con print y resolucion de pagina

Postby jfafive » Mon Jul 05, 2010 9:34 am

Gracias a todos por vuestras ideas, que seguro me han ofrecido la base para la solución.

Antolín, la misma tactica utilicé yo. Pues lo primero que hice fué imprimir una plantilla en papel con lineas horizontales y verticales que marcan las posiciones fila columna en numeros. Pero esta rejilla tambien cambia de resolución cuando cambio de impresora. Tendré que probar esa función de configuración de página que me ocmentas.

Puede que no sea más que eso.

Gracias, os iré informando de como resulta todo esto al final.
Una vez mas, muchas gracias por vuestra inestimable ayuda.
:D
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Imprimiendo con print y resolucion de pagina

Postby jfafive » Thu Jul 08, 2010 10:19 am

Antolin,

He probado usando oPrn:CmSay() y oPrn:SetPage(9), así como oPrn:SetPortrait(), pero sigo encontrando diferencias aunque leves como por ejemplo: el tamaño y distribución de los fuentes cambia de una impresora a otra, el texto se puede ver con mas o menos separación entre las letras así como varia su tamaño.

Este es el codigo fuente que he usado para el ejemplo:
Code: Select all  Expand view

      local oPrn
     
      PRINT oPrn NAME ;
         OemToAnsi( "Listado de facturación." ) PREVIEW

      PAGE

      oPrn:SetPage(9)
      oPrn:SetPortrait()

      oPrn:CmSay( 10,10, "Nº FACTURA" )
      oPrn:CmSay( 20,10, "NOMBRE" )

      ENDPAGE

      ENDPRINT
 



Si hay algo que falta te agradecería me lo dijeses o si me puedes pasar un ejemplo de tu codigo, pues mejor.

Lautaro:
Tambien he probado con tu ejemplo:
Code: Select all  Expand view

nAltoRow   := oprinter:nvertres()/65
nAnchoCol :=  oprinter:nhorzres()/170

// Luego para imprimir uso :

oPrinter:say(nAltoRow*nRow,nanchoCol*nCol,"lo que quiero imprimir",oFont4)
 


Pero el resultado siempre es el mismo, una diferencia aunque pequeña pero no se si lo suficiente como para descuadrarme todo el listado según la impresora.

Antolin:
No he podido encontrar esas opciones para cambiar el lenguaje de la impresora de EMF a RAW por lo que no puedo confirmar si se trata de eso al final o no. Te agradecería me indicases donde debo cambiar esas opciones, pues en propiedades de impresora no he encontrado nada.

Si alguien me puede enviar un codigo de ejemplo que le funcione independientemente de en que impresora trabaje, se lo agradecería. Así podria descartar que la causa sea externa.

De todos modos, voy a intentar instalar varias impresoras en mi pc para ver si el listado conserva su consistencia y soporta esas pequeñas variaciones.

Un saludo y gracias por vuestra atención.
:?
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Imprimiendo con print y resolucion de pagina

Postby antolin » Fri Jul 09, 2010 10:19 am

jfafive

Al revisar el código que viene en tus post me ha saltado a la vista un detalle que a lo mejor tiene más importancia de lo pueda parecer, y es que no especificas que font quieres untilizar en el CmSay

Code: Select all  Expand view
oPrn:CmSay( 10,10, "Nº FACTURA" ,oFont) // <--- falta el font en tu código
oPrn:CmSay( 20,10, "NOMBRE",oFont ) // <--- falta el font en tu código
 

Es posible que ese sea el problema; pues seguramente cogera el font por defecto de cada ordenador produciendo variaciones de anchuras.

En cuanto a lo del RAW y EMF, tienes que entrar en propiedades de impresora desde el panel de control (no preferencas de impresión) veras una pestaña (o un botón) llamada "propiedades avanzadas" y en ella un botón llamado "procesador de impresión" allí podrás cambiar de EMF a RAW. Esto, aunque parezca una tontería es posible que tenga algo que ver, pues, la misma Microsoft reconoce que el procesamiento EMF tiene un error que hace que la función SetTextCharacterExtra() no funcione.

Suete

Un saludo
Peaaaaaso de foro...
antolin
 
Posts: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Imprimiendo con print y resolucion de pagina

Postby jfafive » Fri Jul 09, 2010 11:08 am

Antolin,

Gracias por tus indicaciones. He podido comprobar y ya estaba en RAW por defecto.
Por lo que esa posibilidad queda descartada.

Respecto a los fonts, bueno, estaba usando un font solo que lo definia antes de definir el PRINT.

Ahora queda así:

Code: Select all  Expand view

PRINT oPrn NAME ;
   OemToAnsi( "Listado de facturación." ) PREVIEW

DEFINE FONT oFont NAME "Arial" SIZE 15, 5 OF oPrn

PAGE

oPrn:SetPage(9)
oPrn:SetPortrait()

oPrn:CmSay( 5, 2, cNumFac,    oFont )

ENDPAGE

ENDPRINT
 


Como ves, uso CmSay.
He notado que las coordenadas siempre funcionan bien, es decir, independientemente de la impresora que use, si le digo que pinte un texto a 2cm, 2cm siempre lo pintará en esa posición.

Lo que cambia es el tamaño o espaciado entre letras según la impresora.
Ya no se que mas puedo cambiar, parece que sea imposible hacer que el listado salga identico sea cual sea la impresora.
Pero al menos las diferencias no son muy grandes, al menos en las impresoras que he instalado para hacer pruebas.

No se si se me escapa algo.
:roll:
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Imprimiendo con print y resolucion de pagina

Postby antolin » Sat Jul 10, 2010 8:10 am

jfafive
Pensé que si decías de imprimir a 2cm, algunas impresoras lo hacian a 1,8 y otras a 2,3 etc. Pero lo que pides es más complejo, pues creo que eso tiene que ver con los drivers propios de cada impresora y con el metaarchivo intermedio. Estuve estudiano un poquito el mundo del font, y te aseguro que es muy complejo, y a mi nivel, soy incapaz de ayudarte, dado la cantidad de funciones y estructuras que intervienen.

algunos ejemplos de estructuras:

Code: Select all  Expand view
ABC
ABCFLOAT
AXESLIST
AXISINFO
DESIGNVECTOR
DRAWTEXTPARAMS
ENUMLOGFONT
ENUMLOGFONTEX
ENUMLOGFONTEXDV
ENUMTEXTMETRIC
EXTLOGFONT
FIXED
GCP_RESULTS
GLYPHMETRICS
GLYPHSET
KERNINGPAIR
LOGFONT
MAT2
NEWTEXTMETRIC
NEWTEXTMETRICEX
OUTLINETEXTMETRIC
PANOSE
POINTFX
POLYTEXT
RASTERIZER_STATUS
SIZE
TEXTMETRIC
TTPOLYCURVE
TTPOLYGONHEADER
WCRANGE


Con estas estructuras y algunas funciones puedes tocar hasta el último pixel del glipho de cada letra del font, pero ¿cómo? a mi me supera.

A lo mejor hay una solución tonta, pero la desconozco.

Un saludo
Peaaaaaso de foro...
antolin
 
Posts: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Imprimiendo con print y resolucion de pagina

Postby jfafive » Sat Jul 10, 2010 11:27 am

Gracias por tu ayuda Antolin,

De todos modos los listados se van a volcar casi siempre a PDF directamente.
De momento trabajo con novaPDF como impresora virtual y parfece que no da ningún
tipo de problema.

Creo que la calidad de mi trabajo ahora mismo es aceptable.

Gracias de todos modos.
Javier.
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 80 guests