Page 1 of 4

TdosPrn con Preview e impresoras laser

Posted: Tue Feb 07, 2006 11:47 pm
by ralph
Estimados amigos del foro:

Como muchos de ustedes uso la clase TdosPrn modificada por Ednaldo Rolim que nos da la opcion de previsualizar los reportes (una excelente clase) antes de imprimirlas en impresoras matriciales.

Sin embargo me encontre con clientes que tenian impresoras Laser USB, u otras con tarjeta de red y se quejaban de que no podian imprimir desde este preview. Habia que hacer algunos trucos con NET USE LPTx para que se pudiera redireccionar la impresion a esas impresoras, lo que resultaba un tanto molesto.

Me preguntaba si es que tendria que rehacer todos mis reportes en las que usaba la clase TdosPrn para cambiarlos a tReport o tPrinter, pues con esas clases los reportes no tenian problemas al imprimir en cualquier impresora.

Investigando la clase TxtPreview (llamada por TdosPrn), encontre que la previsualizacion la hace usando otra clase fGet (de Ramon Avendaño), la misma que tiene un metodo Print() que llama a la clase tPrinter (entendieron el rollo?).

Bueno.... con unas horas (dias?) de trabajo pude hacer algunas modificaciones en ambas clases (txtpreview y fGet) para conseguir imprimir en tamaños de fuente apropiados para laser y ahora el problema de imprimir en CUALQUIER IMPRESORA se termino! (al menos eso creo)

No tengo que modificar mis reportes antiguos !!! (que heredo desde DOS) y puedo "convertirlos" a modo grafico (lo he probado en varios modelos laser y de inyeccion de tinta con exito). La fuente con la que imprime es "Lucida console" que esta todas las PC a partir de windows XP. Por ahora solo reconoce 2 tamaños de fuentes el modo "normal" y "comprimido" (que para mi es suficiente). Si alguna mente mas lucida sugiere _ para imprimir otros tipos de fuente, sea bienvenida.

Les paso los fuentes para quienes les interese, espero no estar violando derechos de autor, aclaro que las clases mencionadas no son mias. Es un pequeño aporte por lo mucho que he recibido de este foro.

Pueden descargar los fuentes y un ejemplo desde www.solupymes.com/fwin/tdosprev.zip


Saludos

Ralph del Castillo

Posted: Thu Jul 13, 2006 5:53 pm
by goosfancito
Sobre esta clase,

Amigo, trate de varias formas de crear la clase y ejemplo que esta en ese zip pero me saltan errores, los que detallo.

Code: Select all

BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'CARETFLINE' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'DRAWFGETLI' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'LENFLINE' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'HEIGHTFLIN' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'WIDTHFLINE' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'FORMATFLIN' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'TFLINE' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'SETFCLIPDA' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'GTFTORTF' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'ISGTF' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'GETFCLIPDA' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'ISRTF' : unresolved external
BLINKER : 1115 : D:\PRUEBAS\TDOSPREV\LIBRERIA\LIB\FGET.LIB(FGET) : 'RTFTOGTF' : unresolved external
Podrías ayudarme por favor.
Gracias.

Posted: Thu Jul 13, 2006 6:09 pm
by ralph
que version de fw estas usando? Yo uso FW26 y no hay problemas.

Posted: Thu Jul 13, 2006 6:11 pm
by goosfancito
a perfecto,

tengo la fw21 por eso entonces.

Gracias.

Re: TdosPrn con Preview e impresoras laser

Posted: Thu Jul 13, 2006 9:40 pm
by Wanderson
ralph wrote:Estimados amigos del foro:

Como muchos de ustedes uso la clase TdosPrn modificada por Ednaldo Rolim que nos da la opcion de previsualizar los reportes (una excelente clase) antes de imprimirlas en impresoras matriciales.

Sin embargo me encontre con clientes que tenian impresoras Laser USB, u otras con tarjeta de red y se quejaban de que no podian imprimir desde este preview. Habia que hacer algunos trucos con NET USE LPTx para que se pudiera redireccionar la impresion a esas impresoras, lo que resultaba un tanto molesto.

Me preguntaba si es que tendria que rehacer todos mis reportes en las que usaba la clase TdosPrn para cambiarlos a tReport o tPrinter, pues con esas clases los reportes no tenian problemas al imprimir en cualquier impresora.

Investigando la clase TxtPreview (llamada por TdosPrn), encontre que la previsualizacion la hace usando otra clase fGet (de Ramon Avendaño), la misma que tiene un metodo Print() que llama a la clase tPrinter (entendieron el rollo?).

Bueno.... con unas horas (dias?) de trabajo pude hacer algunas modificaciones en ambas clases (txtpreview y fGet) para conseguir imprimir en tamaños de fuente apropiados para laser y ahora el problema de imprimir en CUALQUIER IMPRESORA se termino! (al menos eso creo)

No tengo que modificar mis reportes antiguos !!! (que heredo desde DOS) y puedo "convertirlos" a modo grafico (lo he probado en varios modelos laser y de inyeccion de tinta con exito). La fuente con la que imprime es "Lucida console" que esta todas las PC a partir de windows XP. Por ahora solo reconoce 2 tamaños de fuentes el modo "normal" y "comprimido" (que para mi es suficiente). Si alguna mente mas lucida sugiere _ para imprimir otros tipos de fuente, sea bienvenida.

Les paso los fuentes para quienes les interese, espero no estar violando derechos de autor, aclaro que las clases mencionadas no son mias. Es un pequeño aporte por lo mucho que he recibido de este foro.

Pueden descargar los fuentes y un ejemplo desde www.solupymes.com/fwin/tdosprev.zip


Saludos

Ralph del Castillo
Ola Ralph

A mi el report no funciona en windows 98 e impressora Epson fx-2180 la fonte passa de la margen.

Posted: Wed Oct 22, 2008 10:27 am
by anserkk
Caro Ralph

Posso usar essa classe com FWH Versão 8.08

Vou ter que modificar qualquer uma das seguintes PRG 's que vem junto com FWH versão 8.08 para obter uma visualização e impressão para DOS usando o TextPrev.Prg

Fget.Prg
FGet.Ch
Printer.Prg
TDosPrn.Prg



Atenciosamente

Anser

-------------------------------------------------

Estimado Ralph

¿Puedo utilizar esta clase con FWH, versión 8.08

¿Tengo que modificar cualquiera de los siguientes PRG 's que viene junto con FWH Ver 8.08 para obtener una vista previa e imprimir a DOS utilizando el TextPrev.Prg

Fget.Prg
FGet.Ch
Printer.Prg
TDosPrn.Prg

Recuerdos

Anser

Posted: Thu Oct 23, 2008 8:16 am
by anserkk
Soy capaz de ver la vista previa a pesar de pequeños problemas hay en la pantalla de la página, pero la impresión no se realiza en modo DOS, pero está utilizando el modo gráfico (impresión lenta)

En la vista previa he encontrado los siguientes problemas
1) En la parte inferior de cada página, la primera línea de la página siguiente se agregará también.

¿Puede alguien ayudarme en este respecto. Yo muy mal necesario la solución de impresión para DOS con una vista previa y selección de páginas para imprimir

Gracias de antemano

Anser

Posted: Fri Oct 24, 2008 2:24 am
by ralph
Les sugiero revisar este mensaje:

http://www.fivetechsoft.com/forums/viewtopic.php?t=6999

con esta version puedes imprimir tanto en impresoras matriciales (modo texto) como en modo grafico (impresoras laser)

saludos

ralph

Posted: Fri Oct 24, 2008 8:58 am
by anserkk
Estimado Raplh,

Estoy utilizando FWH 8,08 con xHarbour.

He descargado el código fuente y la muestra de la página web proporcionada por usted www.solupymes.com/fwin/tdosprev.zip

El Prueba.exe también se encuentra en que el archivo zip (EXE es generado por usted). Incluso si lo intento exe que es sólo la impresión en modo gráfico (lento) y no es como si vas al símbolo del sistema y el tipo DIR> PRN.

Si yo uso puramente TDOSPRN a LPT1 (sin vista previa) y luego la impresión es muy rápido.

Si yo uso TDOSPRN con TxtPreview y si imprimir desde la vista previa de la impresión en modo gráfico (impresión lenta)

Cualquier ayuda en relación con este va a ser muy útil para mí.

Recuerdos

Anser

Posted: Fri Oct 24, 2008 5:50 pm
by ralph
A ver si logramos entendernos:

La funcion TxtPreview.prg puede previsualizar de 2 modos: texto y grafico

Mira el ultimo parametro de la funcion:
TxtPreview( cFile, cTitulo, lModal,,, oPrn, oDlg, , lModoGraf )

Lo que yo hago, es que antes de imprimir, el usuario selecciona si tiene impresora matricial o laser, segun eso escojo que parametro mandar a la funcion.

1. Si el usuario escoje una impresora matricial, previsualizas en modo texto, y al enviar a la impresora se ejecuta el comando DOSPRINT.BAT por lo que la impresion es rapida.

2. Solo previsualizo en modo grafico cuando voy a imprimir en una laser o inkjet

Si estas haciendo eso, no deberias tener problemas.

Saludos

Ralph

Posted: Sat Oct 25, 2008 5:44 am
by anserkk
Ralph,

De alguna manera tengo que trabajar ahora. Gracias por tu clase.

La razón de mis problemas son

En mi aplicación he tenido que especificar la ruta completa para dosprint.bat (Es mi aplicación porque había algunos otros ajustes para cambiar la ruta por defecto)

Por ejemplo:

Code: Select all

if file('d:\Winacs\dosprint.bat')
    WAITRUN("DOSPRINT.BAT " + cTxtTmp + " " + cPorta, 0 )
else
   / / Mi PC se cuelga Si yo utilizar esta opción WinExec WindowsXP
   cPorta: = "PRN"
   winexec( "start c:\Windows\system32\command.com /c copy /b "+ cTxtTmp + " " + cPorta)
Endif
Mi PC se cuelga Si no he utilizado el comando Net use Lpt1: \\PcName\ShareName

Mi situación actual:

Tengo una red de alrededor de
a) 10 PC's
b) 3 impresoras matriciales
c) 1 en Impresoras Láser
d) 1 impresora inyección de tinta

El usuario puede seleccionar cualquier impresora que se desee a partir de la opción Seleccionar la impresora en la ventana de vista previa. Pero ahora usando esta clase, si no he utilizado el comando - Net use Lpt1: \\PcName\ShareName - PC no se imprime si el usuario seleccione matriciales, láser o de inyección de tinta de impresora. Resumen de la impresión es que va a suceder sólo si se captura LPT1

Ralph, ¿cómo manejar esta situación en su idea.


Mi intención es que:
si el usuario seleccione una impresora de matriz de puntos
---- Luego debe obtener DOSPRINT.BAT ejecutados
si el usuario selecciona cualquier otra impresora de matriz de puntos, es decir, láser o de inyección de tinta
---- Luego de impresión normal debe suceder



Ralph, ¿cómo calcular la longitud de página? En su muestra test.prg no he podido encontrar un salto de página dado

Para, por ejemplo,

Code: Select all

If nLin> nMaxLine
    / / No hay oPrn: EndPage () y oPrn: StartPage () Entonces, ¿cómo es el salto de página hecho
Endif
Recuerdos

Anser

Posted: Sat Oct 25, 2008 9:05 am
by anserkk
Estimado Ralph,

Mis observaciones de la clase TxtPreview


TxtPreview( cFile, "Anser Test", .T.,lSpool,cPort, oPrn, WndMain(), , lGraphics )


a) LPT1 debe ser capturado para la impresión rápida de DOS a trabajar a partir de TxtPreview a una impresora de matriz DOT

b) Si LPT1 no es capturado y es lSpool. T., y es lGraphics. F. entonces no ocurre nada cuando el usuario haga clic para imprimir

c) Si LPT1 si no es capturado y es lSpool. F., y es lGraphics. F. entonces se bloquea PC y salga anormal cuando el usuario haga clic para imprimir

d) U puede imprimir en láser y Injet impresoras sólo cuando se lGraphics. T.

Raplh ¿hay alguna manera de identificar si el usuario selecciona una impresora de matriz de puntos o láser / inyección de tinta, de modo que desde el interior de la clase TTextPrev _ el valor de lGraphics a cualquiera. T. o . F. que resuelve el problema

Recuerdos

Anser

Posted: Mon Oct 27, 2008 5:21 am
by ralph
He hecho unas modificaciones en la clase Tdosprn para seleccionar algunos parametros antes de imprimir:

1. Poder seleccionar la impresora,
2. Seleccionar el modo de impresion (texto o grafico)
3. Indicar la cantidad de lineas por pagina
4. Si se desea previsualizar o no

No conozco como saber si una impresora es laser, por eso el usuario debe indicar el modo de impresion.

Pueden descargar desde aqui: http://www.solupymes.com/fwin/tdosprevn.zip

Saludos

Ralph

Posted: Tue Oct 28, 2008 5:51 am
by anserkk
Estimado Ralph,

I y se intenta hacerle saber mi opinión. De ave sido mejor si tuviéramos una opción para averiguar si el usuario selecciona la impresora es de matriz de puntos (Texto) o láser / inyección de tinta (gráficos) y, en consecuencia, el código para generar la vista previa

Recuerdos

Anser
English

»
Spanish

Translate

Posted: Wed Oct 29, 2008 6:48 am
by anserkk
Estimado Ralph

He intentado su última versión, pero lamentablemente no es el texto que aparece en la ventana de vista previa. Ventana de vista previa está en blanco. Tuve el mismo problema cuando utiliza la versión anterior de la clase, pero me corrige este problema utilizando la ruta completa en el cFile

Code: Select all

SetMTxtPreview (.F., 5, 2,.F.,.T.)
cPort: = "LPT1"
cFile: = "D: \ TEST.PRN"
oPrn: = TDosPrn ():New(cFile)
TxtPreview (cFile ", Anser Test",. T.,,, oPrn, WndMain (),,.F.)
Pero este truco no funciona con la versión actual, que le proporcionó y, por tanto, no de salida en la ventana de vista previa. ¿Tiene alguna sugerencia sobre cómo resolver el problema de la vista previa?

Ralph,

Con el siguiente código se puede identificar si una impresora seleccionada es matriz de puntos o no


Si oPrn: nLogPixelX () <= 350, entonces es una impresora de matriz de puntos

Code: Select all

 Si oPrn: nLogPixelX () <= 350
MsgInfo ( "Matriz de puntos nLogPixel es" + str (oPrn: nLogPixelX ()))
Algo más
MsgInfo ( "InkJet / láser nLogPixel es" + str (oPrn: nLogPixelX ()))
Endif 
Lo comprobé el código anterior con diferentes tipos de impresoras (inyección de tinta, láser y matriz de puntos) y yo estoy recibiendo los resultados correctos para determinar si la impresora seleccionada es Dot Matrix o InkJet / láser, aunque existen diferencias en los píxeles de una matriz de puntos a otra impresora de matriz de puntos

Sería bueno si se puede incorporar en la clase

Recuerdos

Anser