La Bitácora de Gabriel

Seleccion de Fuentes y Estilos para Impresoras Matriciales

Posteado por: Gabriel en: Marzo 17, 2008

Como suelo corregir o modificar reportes del sistema de la empresa con el Report Builder de Oracle, surgió la necesidad de imprimir cheques con una fuente distinta (Roman) y mucho más oscura (Negrita), como las impresoras de los cheques son del tipo Matriz de Punto de la marca Epson LX-300/300+ la solución es enviar secuencias de caracteres de control para configurar las mismas en forma automática sin que el usuario de la misma necesite configurar la impresora (Evitando muchos problemas…).

Este caso es especial porque el servidor de reportes Oracle Report Server, que es un módulo del IAS (Internet Application Server de Oracle), se encuentra montado en un servidor GNU Linux, las impresoras físicas se encuentran conectadas a PC’s con Windows donde las mismas están compartidas, desde GNU Linux estas impresoras remotas están montadas o agregadas por medio del protocolo samba (smb) y están configuradas como impresoras de texto plano nada más, que es lo correcto para estos casos. Con esta topología los comandos o secuencias de control se tienen que enviar desde el servidor de reportes en GNU Linux a las impresora.

La solución que encontré para este caso fue agregar las secuencias de caracteres de control a un archivo que ya existía y que es utilizado para configurar la salida de impresión que envía el servidor de reportes a la impresora, estos archivos son de la extensión .prt habiendo varios de ellos dependiendo de la configuración de salida que necesitemos. En nuestro caso ya existía un archivo de definición exclusivo para cheques llamado cheque.prt, sin embargo, para que un reporte utilice la definición del archivo cheque.prt se tiene que ingresar el nombre del archivo en el parámetro de sistema DESFORMAT durante el periodo de diseño del reporte con el Oracle Report Builder:

Parámetro DESFORMAT - Oracle Report Builder

Ahora, ¿donde se encuentran los archivos de definición .prt? Pues eso depende de la instalación del servidor de reportes, lo que si es seguro es que los archivos tienen que encontrarse dentro de los directorios especificados en el PATH del servidor de reportes para que cuando se ejecute un reporte que utilice uno de esos archivos lo encuentre sin problema y pueda así aplicar el formato de salida a la impresión. En mi caso los archivos se encuentran en el directorio /ias/6iserver/report60/admin/printer/ del servidor de reportes.

El contenido completo del archivo cheque.prt se muestra a continuación:

printer "cheque"
height 18
width 80
before report esc hex(78)hex(01) esc hex(6B)hex(00) esc hex(45)
after page
return ""
linefeed control(J)

Para que la impresión del cheque sea con letra Roman y estilo Negrita la línea de texto que se tuvo que agregar es:
before report esc hex(78)hex(01) esc hex(6B)hex(00) esc hex(45)

donde se le indica que antes de imprimir el reporte (before report) se le envía el carácter de escape “esc” y a continuación el código en hexadecimal hex(78)hex(01) que configura a la impresora para que no imprima más en letras de tipo borrador como son Draft y Draft Condensed, luego se le envía otra secuencia que es esc hex(6B)hex(00) cuyos valores en hexadecimal son los correspondientes para seleccionar la letra Roman del tipo NLQ (Near Letter Quality), por último se le envía la secuencia de control esc hex(45) que configura la impresora para que el estilo de la fuente sea negrita. Para mayor información acerca de los caracteres de escape de las impresoras matriciales de punto Epson, favor consultar en su manual.

Así la impresora se configura automáticamente cada vez que se envía una impresión, ya que si la misma se apaga esta pierde todas las configuraciones previas.

A parte de todo esto también estuve probando unas definiciones para el archivo cheque.prt que solo me funcionaron para Windows y no para linux, pero no me puse a investigar el motivo por el cual no me funcionaba. El contenido del archivo es como sigue:

printer "cheque"
height 18
width 80
before report
esc hex(45)
esc hex(78)hex(01)
esc hex(6B)hex(00)
after page
return ""
linefeed control(J)

y como estamos en el tema también probé enviar secuencias de caracteres a una impresora desde la línea de comandos (shell) de linux para configurar la misma, tuviendo que realizarlo de la siguiente forma:

ShellScriptComandos ShellScript:

//Configura la impresora para que el estilo del texto sea Negrita:
[gk@server gk]$ echo -en '\x1B\x45' | lp -d lpgabriel

//Envía a la impresora un comando de salto de línea:
[gk@server gk]$ echo -en '\x1B\x0A' | lp -d lpgabriel

//Configura la impresora para que no se puedan usar fuentes NLQ, solo Draft y Draft Condensed:
[gk@server gk]$ echo -en '\x1B\x78\x00' | lp -d lpgabriel

//Configura la impresora para que se pueda usar fuentes NLQ:
[gk@server gk]$ echo -en '\x1B\x78\x01' | lp -d lpgabriel

//Configura la impresora para que seleccione la fuente NLQ Roman:
[gk@server gk]$ echo -en '\x1B\x6B\x00' | lp -d lpgabriel

//Configura la impresora para que seleccione la fuente NLQ Saint Serif:
[gk@server gk]$ echo -en '\x1B\x6B\x01' | lp -d lpgabriel

Básicamente se envía una cadena de caracteres a la entrada standart del comando lp, el parámetro “-en” del comando echo permite que la cadena de entrada salga oculta y sin un carácter de retorno de linea, esto es fundamental para que la impresora interprete el comando, el parámetro -d del comando lp permite definir cual será la impresora en la que se enviará la impresión.

41 comentarios para "Seleccion de Fuentes y Estilos para Impresoras Matriciales"

Gracias Viejo… tu articulo ha sido de mucha ayuda..!

Hector, espero que así haya sido y te agradezco por haber dejado tu comentario. Saludos.

Gabriel como puedo imprimir desde la linea de comandos de linux un archivo de texto con formato, el problema que tengo es que uso una impresora tipo tiketera star tsp100, logro imprimir desde el shell pero no con el formato adecuado, espero puedas darme una ayuda. Gracias

Hola Paul, la verdad que no tengo experiencia con impresoras ticketeras, los caracteres ascii que envío para configurar la impresora son los que Epson documentó en su manual para realizar las configuraciones de la LX300/LX300+, no se si la impresora que dices funciona de igual manera, eso debería estar en su manual.

Otro punto muy importante es saber si soporta de lenguaje ESC/P, este es el que permite interactuar con la impresora por medio de los comandos. En la empresa usan impresoras ticketeras pero de la marca Epson TM-U950 paralelas y seriales y que según entiendo también utilizan el lenguaje ESC/P.

Lamento que no pueda ofrecerte más ayuda.

Saludos.

necesito conseguir manual de programación de impresoras TM de Epson. Concretamente necesito programar apertura cajón monedero de una TM U220A. Tiene un conector rj11. Si alguien tiene los códigos scape y me los puede pasar, o el manual, estaría muy agradecido….

Grabriel que tal.
Gracias por tu articulo.
En mi caso, tengo que imprimir un reporte en caracter, que usa 2 formatos de letra. En el encabezado un tamaño grande, el detalle mas pequeña. Cuando el reporte solo es de una pagina todo sale perfecto. Pero cuando el reporte lleva mas de 2 hojas, el ultimo tamaño de letra se va para todas las paginas siguiente y esto ocasiona que se corran la impresion y se malgastan las hojas, el reporte que hablo es de facturacion y ya las hojas estan preimpresas. Asi que solamente mando son las datos a llenar la hoja preimpresa.
Gracias de ante mano por tu ayuda.

Hola, quisiera que me disculpen por responderles después de tanto tiempo, es que estuve ocupado preparando y defendiendo mi anteproyecto de tesis :S, pero eso es otro tema.

Primeramente quisiera responderle a Ariel:
Según estuve viendo, esa impresora soporta los comandos esc-pos, así que supongo que con ellos deberías poder manejar esa impresora sin problemas, fíjate en este PDF: http://sd.epson.es/support/download/data/faq/escpos.pdf, en el punto 9 menciona el comando para abrir la gaveta o cajón, espero que te sirva.

Jorge G: el tamaño de la letra, lo envías con los comandos de escape de la impresora? como envías esos comandos a la impresora? usas el report server de Oracle? me gustaría saber más detalles sobre el escenario de tu problema..

Saludos.

Hola Gabriel
Estoy buscando en internet porque necesito imprimir cheques en papel continuo en impresora matricial Epson desde oracle report y necesito que imprima sin ningun margen y hasta ahora no he podido, probe configurar la impresora pero igual me deja el margen, Hay alguna forma de que no deje margen. Agradeceria mucho si me puedes ayudar hace muy poco que estoy con esta herramienta.
Gracias, Marcela.

Hola Marcela,
Antes que nada gracias por visitar mi bitácora. El reporte para la impresión de cheques que yo uso está configurado para que la altura del reporte sea de: ancho=8.5″ y de alto=3″, también es importante tener configurado la anchura y la altura para el modo carácter, en mi caso es de 80 caracteres de ancho y 18 de alto, en el diseño de salida tengo solamente 16 campos de texto que se van rellenado según lo que se necesita, y tengo todo el margen ocupado como se muestra en esta imagen, por otro lado, para que puedas imprimir el cheque sin que haga el salto de página tienes que tener configurada tu impresora matricial en el sistema operativo para que solo admita texto y eso creo que sería todo a grandes rasgos.

Sería interesante saber si utilizas el Report Server o si trabajas en modo cliente-servidor, que versión del Report estás usando y en el caso de que utilices un Report Server en que Sistema Operativo se encuentra instalado.

Espero que haya sido de ayuda,
Saludos..

Hola Gabriel

Estoy intentando sacar impreso un reporte a media pagina, intente cambiando el alto en el Main section pero nada que me funciona me sigue sacando el reporte en tamaño carta, tambien intente creando un archivo PRT lo agrege en el desformat y en la carpeta PRINTER en mi servidor, de esta forma tampoco me funciono, mi impresora es una EPSON LX-300, espero me puedas ayudar.

Hola Henry,

¿Que tienes configurado en el parámetro de sistema MODE del reporte? para impresión de cheques yo tengo que es de tipo carácter, por otro lado tienes que tener configurada tu impresora para que reciba solo caracteres, si utilizas Windows, en la ventana propiedades de tu impresora, pestaña Opciones Avanzadas creo que tiene que estar marcada la opción “Imprimir directamente en Impresora”.

Espero que mi comentario haya sido de ayuda, Saludos..

Muchas gracias por el comentario, me sirvio de mucho.

Que bueno, si eres el visitante Henry ¿cual fue tu inconveniente? era un problema de configuración del reporte o de la impresora? para saberlo nada más…

Saludos..

Gracias por este aporte, lo probe en ubuntu en una Epson TM-U220

Reemplace el comando:
echo -en ‘\x1B\x0A’ | lp -d lpgabriel

por:
echo -en ‘\x1B\x0A’ | lpr

y funciona de maravilla.

Aprovecho para compartir 2 comandos mas:
1. echo -en ‘\x1D\x56\x1′ | lpr sirve para hacer corte parcial
2. echo -en ‘\x1B\x70\x0\x64\x64′ | lpr sirve para abrir el cajon de monedas

necesito ayuda por favor, no puedo hacer andar la impresora fiscal epson TM-U220A en ubuntu 9.04

saludos

fachamix@hotmail.com

Hola Caro,

Gracias por tu aporte, es muy importante tener a mano el comando para abrir la gaveta, y el otro (el primero) es para que la impresora genere un corte de cuchilla? o lo entendí mal, bueno, de todos modos es cuestión de investigar..

Muchas gracias nuevamente, Saludos..

Tengo una impresora TMU 200B y toco configurarla como generic / text only pero al momento de imprimir me sale un error que no fuentes no existen gracias si me puedes colaborar att juan

Hola Juan Pablo..

Supongo que configuraste tu impresora en un Linux o me equivoco?
El problema puede ser que no reconoce los caracteres de control que son enviados a la impresora, también puede ser que esa impresora no soporte los mismos tipos de letras que tienen las LX 300(+), o quizás ni siquiera soporte el lenguaje ESC/P, algo que se debería verificar en el manual de la impresora. Si pudieras aportar algo más de información sería de utilidad.

Saludos.

Gabriel

soy de Argentina. Estoy imprimiendo cheques(oracle financials-report builder) en papel continuo(4 x hoja) en epson matricial.
Sabemos que el karma eterno es resolver el leve ‘corrimiento’ que se genera entre la impresion de un chq y otro.
No tenes una guia completa de los pasos a seguir para evitar este bendito problema ?
mil gracias

Hola Pablo

Hasta donde yo se nosotros imprimimos nuestros cheques en formato de texto solamente, utilizamos comandos ESC/P para dar formato al texto en la impresora (negrita, tipo de letra, etc.) y se ajustan esos leves corrimientos con micro-adjustment de la impresora Epson, además te comento que nosotros no utilizamos salto de página para avanzar al otro cheque..

Saludos.

Hola Gabriel , mucho gusto. Primera vez que entro en tu bitacora.
me parece genial.
Estoy tratando de imprimir un formato de cheques que tiene 7.3″ de alto desde report6 en Linux Red Hat. Lei todos tus comentarios acerca de ese tema y creo que los he aplicado. Lo unico es que no estoy seguro si la impresora fuè definida solo caracter. Sabrias como puedo chequear esto o como prodría crear una impresora sòlo caracter en Linux.
Muchas Gracias

Hola Oswaldo, gracias por visitar mi bitácora (des-actualizada por ciento jeje), bueno, primero te quería recordar que en los archivos .prt podes configurar la altura de la hoja del cheque, arriba en mi ejemplo tengo estos datos (y otros más) en el archivo cheques.prt:

height 18
width 80

Con respecto a la configuración de la impresora te cuento que en mi caso, todas las impresoras que tengo configuradas en mi server Linux (mi server con Oracle Application Server) son impresoras remotas compartidas en Window$, osea que en mi servidor las tengo configuradas con samba y durante el proceso de agregado tuve que seleccionar la opción: TEXT ONLY PRINTER, claro que esto lo realicé con el asistente de la distribución RedHat 4 U6.

Saludos.

ola gabriel me puedes ayuadar necesito imprimir unos datos sobre un formato en una impresora de punto ya configure el .prt pero aun sale desorganizado la imprimiendo

Hola Catalina… bueno, me gustaría saber que te sale desorganizado, lo que comentas es muy escueto y no es suficiente para ayudarte, ¿te imprime los caracteres que escribiste en tu archivo .prt?, ¿tu report server corre en linux? en fin, cuanta mayor cantidad de datos mejor..

Saludos

Estoy tratando de configurar el espacio entre líneas en una epson lx300+. Según el manual, este espacio puedo ser reducido a aumentado. Sin embargo, no especifica de manera muy clara cómo hacerlo. Necesito reducir este espacio para poder imprimir desde un sistema desarrollado en informix para unix (SCO).

Hola Carlos,

En el tema Nº 3 “Comandos de Interlineado” del documento escpos.pdf del que había dejando un enlace en el comentario Nº 7, en la 2da. opción muestra cual es el comando esc/p que permite configurar el espaciado entre lineas definiendo la cantidad de pulgadas que deberán abarcar 60 lineas (n/60), lamentablemente yo no tengo tiempo para probarlo así que esto queda en tus manos.

Saludos.

Un favor, tengo un recporte en modo caracter que se imprime en papel continuo y este tiene asociado un prt, el problema es que cuando termina de imprimir deja una hoja en blanco, trate de eliminar el “after page” para que no haga el salto de pagina pero cuando el reporte es de 2 o mas hojas se descuadra, por eso tengo que mantener el “after page” para que no se descuadren las hojas de pagina en pagina. la pregunta del millon es: Como hago para que haga el salto de pagina pero no el salto al final del reporte?

mi prt es :

printer “caracter”

height 66
width 255

before report
esc “@”
esc “M”

after page
return “”

linefeed control(J)

Hola CarlosCH

La verdad que no tengo idea, es una impresora de carro ancho según veo (width 255), quizás puede ser algún salto de página del reporte en si, por otro lado, mirando por ahí he visto que el comando esc “@” sirve para inicializar la impresora, yo no lo utilizó y funciona para igual en la LX300/+, pero cual es la función del otro comando esc “M”?

Saludos

Hola Gabriel, te cuento un poco para que estes al tanto. Yo trabajo con Oracle Developer hace ya varios años y por lo general los reportes que he hecho son bitmap, de hecho ahora se visualizan desde el Portal, mi conocimiento de los reportes caracter en cuanto a prt’s es casi nulo, de hecho lo que se hasta el momento de prt’s lo he aprendido empiricamente e investigando por todo lado, realmente, no se para que sirven las letras despues del esc ni se cual es su significado y es precisamente eso lo que necesito saber, si tuvieras algun manual al respecto o alguna dirección donde pueda leer o bajar información te lo agradecería bastante.

La impresora donde trato de imprimir esto es una FX-870 que no es de carro ancho pero el prt esta con 255 porque la letra es comprimida y se adapta al ancho de la hoja, con eso no hay mayor problema, el tema es, como ya explique en mi primer comentario, que cuando tengo que imprimir un reporte de mas de una hoja tengo que ponerle el “after page” para que salte de manera correcta entre hoja y hoja pero lamentablemente después de imprimir la última hoja de ese reporte salta una hoja dejando una página en blanco. Si no pongo el “after page” cuando imprime 1 hoja el carro no corre y se situa correctamente al inicio de la hoja que sigue como para imprimir el siguiente reporte pero cuando es un reporte de mas de 1 hoja se empieza a descuadrar a pesar de que en la configuracion del layout del reporte esta con el alto de 66 igual que el prt.

Si sabe scomo hacer para que retroceda el carro o para controlar desde el prt el reporte apra que no haga el “after page” cuando sea la última hoja del reporte seria ideal sino me conformaría con tener como ya te dije lineas arriba un manual o algo parecido dnde explique que significa cada cosa en el prt.

Quedo a la espera de tu respuesta y MUCHAS GRACIAS de antemano.

Uff, se me pasó tu comentario… bueno, la verdad que no tengo mucha experiencia en el tema, pero me parece extraño tu problema, en mi configuración para la impresión de cheques en una Epson Lx300/300+ también está el after page pero no hay problemas, quizás durante el diseño del reporte se haya agregado un salto de página en algún corte de control (en algún frame), es lo que se me ocurre por el momento..

Saludos y te pido disculpas por la demora..

Hola Gabriel, es la primera vez que ingreso en tu bitácora y es de mucha utilidad para mi, tengo una problemita y necesito tu ayuda. Estoy imprimiendo varias facturas en Report Builder 6 y el inconveniente que tengo es que en la primera hoja imprime bien, pero a partir de la segunda imprime como 5 centímetros mas abajo y así va aumentando en cada hoja.

Como hago para imprima correctamente en cada hoja? Desde ya muchas gracias.

Hola Rene, si tus impresiones son en formato carácter deberías verificar en el área de diseño en el Report Builder que la altura de tu reporte sea la adecuada, no solo la altura en pulgadas, si no el ancho en columnas y la altura definido mediante la cantidad de líneas (que creo que es lo que realmente importa cuando el reportes es de tipo carácter).

Normalmente las impresoras Epson lx300/lx300+ imprimen a razón de 1/6 pulgadas, osea, 6 lineas por pulgada, así que deberías verificar que altura tiene tu hoja de factura y como está diseñado tu reporte.

Saludos.

Sres. buenas tengo una conosulta, sobre impresion desde Ubuntu, con oracle reports, quiero imprimir en TMU-220, epson LX300+ y epson LQ2090, pero me da probemas, como debo instalar las impresoras, algo en especial en los prts, o que tengo que hacer….

Virgilio Argeñal
Guatemala, Guatemala…..

Hola Virgilio, si es para facturas debería andar con configurar tu impresora como impresora de texto, pero que tipo de problemas te da? y que es tu Ubuntu, una PC cliente o un server?

Hola Gabriel, mira tengo una impresora LX-300 y suelo imprimir un archivo especifico que me envian por correo y la letra me sale muy pegada una encima de otra, lo cual ni se entiende el contenido pero solo es que con ese archivo adjunto, porque las demas impresiones me salen correctamente.

Me dice el tecnico que debo cambiar la configuaracion de la letra de la impresora, pero la verdad es que es solo con ese archivo que me envian que no me deja imprimirlo legible porque lo que lo demas me imprime correctamente.

Hola Nancy, es un archivo de texto plano o uno con formato? porque si el archivo es de texto plano quizás contenga comandos ESC/P que configuran automáticamente la forma de impresión (tipo de letra, el tamaño, cantidad de lineas por pulgadas, etc). Quizás la configuración de la impresora tenga algo que ver mmm… pero no se, la impresora está configurada en una pc con Windows o algún Unix/Like?

Saludos.

Hola mi problema es asi:
Tengo la Epson TM-U220PD pero al momentos de imprimis los recibos la letras sale muy pequena tanto que los numeros no son legibles…

Como le cambio del tamano de impresion de la letra para los recibos.???

salude

Hola MarvinC, quizás falte configurar la impresora y según tengo entendido la mismo soporta comandos ESC/POS por medio de los cuales puedes realizar cambios. En el sitio web de epson hay algunos FAQ’s relacionados con ese modelo de impresora (o similar) que quizás te puedan sirvan: http://www.epson.com.py/v4/asp/soporteFaqs.asp?idProducto=C183111

Saludos.

necesito ayuda por favor, no puedo hacer andar la impresora fiscal epson TM-U220A en ubuntu 9.04

saludos a todos y gracias

fachamix@hotmail.com

hola gabriel tengo un problema imprimo mediante oracle red hat 5.0, lo que me pasa es k cuando imprimo el salto de hoja ,la primera imprime bien y la segunda hoja imprime mal, he cambiado de impresora y la otra no me causa problmas de hecho k no es el sistema, kisiera saber k parte de mi impresora epson fx 890 esta en problemas para poder solucionarlo. gracias de ante mano tu r4espuesta :)
la primera imprimer a la medida exacta y la segunda hoja va suviendo y la tercera va subiendo mas he tenido k cambiar de impresora nos vemos ayudame porfa =)

Buenas, Gabriel que buena informacion hay aqui.
Necesito tu colaboración: Estoy haciendo un reporte (Report Builder 6.0.8.27.0) este se genera a través del report background cuando se invoca desde una forma (Forms [32 Bit] Version 6.0.8.27.0 ), se trabaja en cliente servidor, cuando se envia el reporte con 1 sola copia todo va bien, pero cuando se envia mas de una copia y el contenido del documento llega a mitad de pagina, la siguiente copia me continua imprimiendo en la misma pagina donde termino la primer copia. Como hago para darle un salto de pagina y si termina a media pagina complementar estos con un caracter especial.
Saludos y gracias.

Escribe un comentario

cc - by cc cc

Bienvenidos!

Muchas gracias por visitar este pequeño espacio que a medida que pasa el tiempo va cobrando vida y forma, encontrarán mucha información acerca de mi pasión que es la Informática, como así también de mi trabajo y de mi vida personal, espero que les guste! Saludos.

Gabriel K.

Correo Electrónico

Para cualquier consulta, sugerencia, críticas, etc., pueden enviar un correo a:

La imágen

Ídolos: Adam y Jamie de Mythbusters

Ídolos: Adam y Jamie de Mythbusters

Calendario

Marzo 2008
D L M X J V S
    Abr »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Categorías

Visitas

  • 38,116

Fotos Flickr

openSUSE v11.1 con KDE v4.2.4

Un fin de semana por Cnel. Oviedo

More Photos

Tira Ecol