|
© 2009 PortalFox
|
|
|
| Enviado por Luis María Guayán en Viernes, 03 Marzo, 2006 |
|
Presentamos aquí unas funciones para imprimir códigos de barras 128 con diversos tipos de fuentes TrueType con lectura humana.
Códigos de barra 128 con lectura humana | Por Carlos Yohn Zubiria (España) y Luis María Guayán (Argentina) |  |
En este artículo vamos a presentar unas funciones para imprimir códigos de barras del tipo 128 con diversas fuentes TrueType que nos permitirán lograr distintas alturas de códigos de barras y también la impresión de la cadena para lectura humana. Los códigos 128Como ya vimos en el artículo "Códigos de barras en reportes de Visual FoxPro", los códigos de barras 128 se dividen en 3 subconjutos: - El subconjunto A incluye: los dígitos, las letras mayúsculas, y los códigos de control.
- El subconjunto B incluye: los dígitos, las letras mayúsculas y minúsculas, y los códigos de control.
- El subconjunto C incluye: solo los dígitos y comprime dos dígitos numéricos en cada carácter, proporcionando una muy buena densidad de impresión.
Los códigos 128 se forman de la siguiente manera: CaracterInicial + CadenaTexto + DigitoControl + CaracterFinal Las funciones descritas al final del artículo calculan el dígito de control y añaden los caracteres de inicio y final de cada tipo de código de barra 128, a la cadena de texto. Las fuentes TrueTypeLas siguientes son una descripción de las fuentes disponibles en este artículo: - Code 128AB (Bc128ab.ttf): Código 128 A y B Normal
- Code 128AB Short (Bc128abs.ttf): Código 128 A y B Bajo
- Code 128AB Tall (Bc128abt.ttf): Código 128 A y B Alto
- Code 128AB HR (Bh128ab.ttf): Código 128 A y B Normal con Lectura Humana
- Code 128AB Short HR (Bh128abs.ttf): Código 128 A y B Bajo con Lectura Humana
- Code 128AB Tall HR (Bh128ab.ttf): Código 128 A y B Alto con Lectura Humana
- Code 128C (Bc128c.ttf): Código 128 C Normal
- Code 128C Short (Bc128cs.ttf): Código 128 C Bajo
- Code 128C Tall (Bc128ct.ttf): Código 128 C Alto
- Code 128C HR (Bh128c.ttf): Código 128 C Normal con Lectura Humana
- Code 128C HR Short (Bh128cs.ttf): Código 128 C Bajo con Lectura Humana
- Code 128C HR Tall (Bh128ct.ttf): Código 128 C Alto con Lectura Humana
- Codigo de barras CyT (codigo_barras_cyt.ttf): Código 128 A y B Alto
Estas fuentes TrueType se corresponden adecuadamente al tamaño de fuente mínimo recomendado por Correos de España que es 24 y de un ancho máximo de 105 mm. Los requisitos para los envíos a Correos de España son: - Código 128 A
- Densidad entre 0,38 mm. y 0,63 mm.
- Composición del código:
- Tipo de producto en 2 posiciones: Consultar con Correos los tipos admitidos
- Código de cliente en 8 posiciones: Solicitar el código a Correos
- Número de envío en 13 posiciones: No puede repetirse antes de 5 años. Puede incluir el año como las 4 primeras posiciones
La fuente que mejor se adapta a estos requisitos es la "Code 128AB Tall HR" con un tamaño de 28 puntos. Independientemente de lo expresado anteriormente, estas fuentes TrueType se pueden adaptar a cualquier necesidad de impresión de códigos de barras 128, por las diversas combinaciones posibles entre tipo, tamaño e impresión de la cadena para la lectura humana. Las funciones en VFPLas funciones en Visual FoxPro para cada uno de los tres tipo de código de barra 128 son las siguientes: FUNCTION Codigo128A
LPARAMETERS m.cadena
*** Convierte una cadena para ser impresa en un
*** código de barras de tipo 128 A
*** Fuentes True Type válidas:
*** "Code 128AB", "Code 128AB HR",
*** "Code 128AB Short", "Code 128AB Short HR",
*** "Code 128AB Tall", "Code 128AB Tall HR" y
*** "Codigo de barras CyT"
IF PCOUNT() = 0
RETURN ""
ENDIF
IF TYPE("m.cadena") = "N"
m.cadena = TRANSFORM(m.cadena)
ENDIF
IF TYPE("m.cadena") != "C"
RETURN ""
ENDIF
m.cadena = ALLTRIM(m.cadena)
LOCAL m.vuelta, m.suma, m.caracterinicial, m.co, m.letra, ;
m.valorascii, m.checksum, m.caracterfinal
m.suma = 103
m.caracterinicial = CHR(123)
m.vuelta = m.caracterinicial
m.caracterfinal = CHR(126)
FOR m.co = 1 TO LEN(m.cadena)
m.letra = SUBSTR(m.cadena, m.co, 1)
m.valorascii = ASC(m.letra)
m.valorascii = m.valorascii - IIF(m.valorascii < 123, 32, 70)
m.suma = m.suma + (m.valorascii * m.co)
m.vuelta = m.vuelta + IIF(m.letra = " ", CHR(174), m.letra)
NEXT m.co
m.checksum = MAX(MOD(m.suma, 103), 0)
m.checksum = m.checksum + IIF(m.checksum > 90, 70, IIF(m.checksum = 0, 174, 32))
m.checksum = CHR(m.checksum)
m.vuelta = m.vuelta + m.checksum + m.caracterfinal
RETURN m.vuelta
ENDFUNCFUNCTION Codigo128B
LPARAMETERS m.cadena
*** Convierte una cadena para ser impresa en un
*** código de barras de tipo 128 B
*** Fuentes True Type válidas:
*** "Code 128AB", "Code 128AB HR",
*** "Code 128AB Short", "Code 128AB Short HR",
*** "Code 128AB Tall", "Code 128AB Tall HR" y
*** "Codigo de barras CyT"
IF PCOUNT() = 0
RETURN ""
ENDIF
IF TYPE("m.cadena") = "N"
m.cadena = TRANSFORM(m.cadena)
ENDIF
IF TYPE("m.cadena") != "C"
RETURN ""
ENDIF
m.cadena = ALLTRIM(m.cadena)
LOCAL m.vuelta, m.suma, m.caracterinicial, m.co, m.letra, m.valorascii, ;
m.checksum, m.caracterfinal
m.suma = 104
m.caracterinicial = CHR(124)
m.vuelta = m.caracterinicial
m.caracterfinal = CHR(126)
FOR m.co = 1 TO LEN(m.cadena)
m.letra = SUBSTR(m.cadena, m.co, 1)
m.valorascii = ASC(m.letra)
m.valorascii = m.valorascii - IIF(m.valorascii < 123, 32, 70)
m.suma = m.suma + (m.valorascii * m.co)
m.vuelta = m.vuelta + IIF(m.letra = " ", CHR(174), m.letra)
NEXT m.co
m.checksum = MAX(MOD(m.suma, 103), 0)
m.checksum = m.checksum + IIF(m.checksum > 90, 70, IIF(m.checksum = 0, 174, 32))
m.checksum = CHR(m.checksum)
m.vuelta = m.vuelta + m.checksum + m.caracterfinal
RETURN m.vuelta
ENDFUNCFUNCTION Codigo128C
LPARAMETERS m.cadena
*** Convierte una cadena para ser impresa en un
*** código de barras de tipo 128 C
*** Fuentes True Type válidas:
*** "Code 128C", "Code 128C HR",
*** "Code 128C Short", "Code 128C HR Short",
*** "Code 128C Tall", "Code 128C HR Tall"
IF PCOUNT() = 0
RETURN ""
ENDIF
IF TYPE("m.cadena") = "N"
m.cadena = TRANSFORM(m.cadena)
ENDIF
IF TYPE("m.cadena") != "C"
RETURN ""
ENDIF
m.cadena = ALLTRIM(m.cadena)
LOCAL m.vuelta, m.suma, m.caracterinicial, m.co, m.letra, ;
m.valorascii, m.valorreal, m.checksum, m.caracterfinal
m.suma = 105
m.caracterinicial = CHR(125)
m.vuelta = m.caracterinicial
m.caracterfinal = CHR(126)
IF LEN(m.cadena) % 2 # 0
m.cadena = "0" + m.Cadena
ENDIF
FOR m.co = 1 TO LEN(m.cadena) STEP 2
m.letra = SUBSTR(m.cadena, m.co, 2)
m.valorreal = VAL(m.letra)
m.valorascii = m.valorreal + IIF(m.valorreal < 90, 33, 71)
m.suma = m.suma + (m.valorreal * CEILING(m.co/2))
m.vuelta = m.vuelta + CHR(m.valorascii)
NEXT m.co
m.checksum = MAX(MOD(m.suma, 103), 0)
m.checksum = m.checksum + IIF(m.checksum < 90, 33, 71)
m.checksum = CHR(m.checksum)
*-- Reemplazo CheckSum
m.checksum = CHRTRAN(m.checksum, ;
CHR(171)+CHR(172)+CHR(173), CHR(176)+CHR(177)+CHR(178))
m.vuelta = m.vuelta + m.checksum + m.caracterfinal
RETURN m.vuelta
ENDFUNCNota importante: Estas funciones solo se corresponden con las fuentes TrueType de este artículo. Las funciones de los artículos "Códigos de barras en reportes de Visual FoxPro" y "Resolución General 1702 de la AFIP (Argentina)" se corresponden a las fuentes disponibles para descarga de cada artículo. Cada fuente tiene su función asociada para la correcta generación de los distintas simbologías de códigos de barras. EjemplosPara utilizar las funciones se debe pasar como parámetro la cadena a codificar: lc128A = Codigo128A("CODIGO128A")
lc128B = Codigo128B("codigo128b")
lc128C = Codigo128C("16886271")Para la impresión se debe seleccionar la fuente correspondiente a cada función: CLEAR
? Codigo128A("CODIGO128A") FONT "Code 128AB Short HR",36
? Codigo128B("codigo128b") FONT "Code 128AB Tall HR",36
? Codigo128C("16886271") FONT "Code 128C HR",60
?
? Codigo128A("PortalFox") FONT "Codigo de barras CyT",48
DescargasEstos son los enlaces para las descargas disponibles de este artículo: Hasta la próxima. Carlos y Luis María.
|
|
|
|
|
|
| Códigos de barra 128 con lectura humana | Entrar/Crear una cuenta | 24 Comentarios |
|
| Los comentarios son propiedad de sus respectivos autores. No somos responsables de su contenido. |
Re: Códigos de barra 128 con lectura humana
por zecarlos en 07 Abr, 2006 - 11:20 (Información del usuario | Enviar un mensaje http://)
|
Al querer crear un codigo de barra para el siguiente codigo me sale una caja en medio de las barras
01474040079785000020060507000137280000
Por favor si me pueden comentar que hice mal
El codigo convertido es }"PII(¨v!!5'&(!"F=!!~
Saludos
|
Re: Códigos de barra 128 con lectura humana
por wrobayo en 06 Jul, 2006 - 10:17 (Información del usuario | Enviar un mensaje
|
|
Excelente articulo...Los felicito.
Soy de Colombia y creame que desde hace rato esto en busca de un sistema para imprimir codigos de barras libre, desde Windows que no fuera por PHP, y por fin.
Nuevamente, desde Bogotá, Colombia:
¡¡¡¡ FELICITACIONES ¡¡¡¡
|
porque se necesita una fuente específica?
por milsoncardona en 08 Sep, 2006 - 01:16 (Información del usuario | Enviar un mensaje
|
Buenos días, un saludo especial.
antes que nada, felicitarlos por el artículos, y aunque yo trabajo con Power Builder, pase los ejemplos a mi lenguaje y corrieron perfecto.
pero me nace una duda, si se supone que yo creo mi codigo de barras code128 bien con el algoritmo de este artículo, ¿porque tengo que usar una fuente determinada para pasarlo a codigo de barras?, ¿no se supone que cualquier fuente de codigo de barras 128 es capaz de interpretar la cadena resultante del algoritmo?
además y si no es mucha molestia, quisiera hacer otra pregunta.
¿que cambios le debo hacer al algoritmo para convertir el código 128 que me arroja, a un EAN 128?. ¿depronto tienen algún ejemplo y las fuentes para crear codigos de barras EAN128?
muchas gracias y de nuevo felicitaciones
|
Re: porque se necesita una fuente específica? por LuisMaria (luismaria@portalfoxxx.com) en 16 Nov, 2006 - 05:07 (Información del usuario | Enviar un mensajehttp://www.luismariaguayan.com.ar | Cada fuente tiene su propia simbología y los caracteres de cada una son distintos, esto es sgún el autor de cada fuente TrueType.
No he podido adaptar estos códigos a EAN-128 ya que estos contienen un valor de control FN2 (que es propio de EAN).
|
Re: Códigos de barra 128 con lectura humana
por glopesa68 en 10 Oct, 2006 - 04:27 (Información del usuario | Enviar un mensaje
|
|
Hola Amigos, esta información me ha servido muchisimo, pero tengo un problemilla, cuando coloque la cadena de caracteres con los digitos de inicio y fin el digito de verificación del code 128 en Excel y lo imprimo, el scanner me lee perfectamente, pero cuando lo imprimo directamente desde el visual, el escanner no me lee el codigo de barras. Me pueden colaborar con esto???
|
Re: Códigos de barra 128 con lectura humana
por mariobaracus en 23 Oct, 2006 - 01:10 (Información del usuario | Enviar un mensaje
|
|
Muy bueno el desarrollo. Luego de mucho tiempo di con esta gran solución. Quisiera realizar algunas validaciones porque no tengo ningún error y, en definitiva, no estoy seguro de obtener un código de barras apropiado. Por casualidad tendrán algunos ejemplos de Code 128C normal (Bc128c.ttf) con cadena de entrada y cadena codificada? Si además tienen el código de barras producido, bienvenido sea. Muchas gracias y felicitaciones.
|
Re: Códigos de barra 128 con lectura humana
por hildebrandosv en 31 Oct, 2006 - 06:10 (Información del usuario | Enviar un mensaje
|
|
Excelente código, sin embargo en mis pruebas no imprime algunos códigos (en comentarios anteriores vi que a alguien más le pasaba lo mismo). Estoy usando el código apropiado, instalé bien las fuentes e hice una prueba con todos los códigos de barras y los "HR" se imprimen muy bien, pero los demás no (128AB, 128C, 128AB Short, 128C Short, 128 AB Tall, 128C Tall), en estos casoso no se imprime nada. Tengo windows XP y VFP 9.0. ¿Tienen alguna solución?. GRACIAS
|
codigo 128 C
por glopesa68 en 26 Ene, 2007 - 10:54 (Información del usuario | Enviar un mensaje
|
Hola, me ha sido de mucha utilidad la información de esta pagina. Muchas gracias por compartir su conocimiento.
Quisiera que me colaboraran con algo, cuando genero ciertos codigos de barra en 128C, algunos no son leidos por el scanner, por ejemplo: 00026300020000 , 00135500010000 , 00119300010000.
Me podrian decir que puede estar pasando???
|
Re: codigo 128 C por LuisMaria (luismaria@portalfoxxx.com) en 27 Feb, 2007 - 10:05 (Información del usuario | Enviar un mensajehttp://www.luismariaguayan.com.ar | No especificas que tipo de impresora utilizas, ni el tamaño de las fuentes. Intenta agrandando el tamaño de la fuente. Ejemplo:
? Codigo128C("00119300010000") FONT "Code 128C HR",60
También controla que el campo de tu reporte sea lo suficientemente ancho para que quepa todo el código
Saludos, Luis María |
Re: Códigos de barra 128 con lectura humana
por leagurru en 15 Feb, 2007 - 06:37 (Información del usuario | Enviar un mensaje http://)
|
|
Estimados: cuando la cadena a codificar es la siguiente 901041000606, la salida codificada tiene entre medio a dos caracteres comillas juntos. Esto hace que haya error cuando lo pego en word con automation.
|
Re: Códigos de barra 128 con lectura humana por leagurru en 15 Feb, 2007 - 07:02 (Información del usuario | Enviar un mensajehttp:// | Disculpen ... el problema es de la macro de word que estoy utilizando para insertar la cadena codificada. La cadena está perfecta, deberé utilizar otra macro.
Saludos y muchas gracias ! |
Codigo de barras 128c -error
por epsilonx en 16 Feb, 2007 - 10:28 (Información del usuario | Enviar un mensaje
|
|
estoy usando la funcion que genera codigo 128C, y en determinados codigos me aparece una caja en blanco por ejemplo el 57001623, genera un caracter raro que no es un codigo de barras, alquien podria darme una mano. gracias erra68dc@yahoo.com.ar
|
Re: Códigos de barra 128 con lectura humana
por Davidlg en 15 Feb, 2008 - 05:29 (Información del usuario | Enviar un mensaje
|
Buenos días.
Tengo un problema con la fuente Code 128AB Tall HR. Me genera correctamente el código de barras y hasta ahí todo perfecto.
El problema está en lo siguiente: Estoy generando un pdf en el que incluyo el codigo de barras pero necesito incrustar la fuente en el pdf ya que a quien se lo voy a enviar no tiene esta fuente, pero al ir a incrustar la fuente me aparece un candado y me dice que "la licencia de esta fuente no permite incrustación".
Muchas gracias de antemano por el artículo.
Saludos.
|
Re: Códigos de barra 128 con lectura humana
por Pierroth en 18 Mar, 2008 - 09:06 (Información del usuario | Enviar un mensaje
|
Hola
primeramente debo agradecer por postear este tema, me ha sido de muchisima ayuda, en mi caso yo traslade sus funciones a Crystal reports y funcionan bien salvo un pequeño detalle, cuando escaneo el codigo generado el primer caracter es distinto al que se ve en el impreso, es decir usando la fuente Code 128AB HR genero un codigo con el siguiente resultado =%6110N, donde N es mi caracter de control, el problema esta en que al escanear el codigo el primer caracter "=" me lo lee como "¿", en otro caso mi primer caracter es "<" y lo lee como ";", por favor necesito ayuda con esto, no se si estyo haciendo algo mal.
saludos,
Ivan Brito.
|
Re: Códigos de barra 128 con lectura humana
por kgarria en 13 Nov, 2008 - 01:35 (Información del usuario | Enviar un mensaje
|
hola a todos, he utilizado el desarrollo vuestro para traducir a otro lenguaje, pero por ejemplo si utilzo el siguiente codigo:
LPP08-002283005
el digito de control que me pinta es un cuadrado en blanco que logicamente no
reconoce ningun lector de codigos de barras,
¿os a pasado algo parecido?
Gracias y un saludo a todos.
|
Re: Códigos de barra 128 con lectura humana
por ga_maldonado en 02 Jul, 2009 - 11:22 (Información del usuario | Enviar un mensaje
|
me pudieran ayudar?, necesito leer de un scanner codigos de barras
espero sus comentarios
gracias
|
Re: Códigos de barra 128 con lectura humana
por giulianorm en 18 Ago, 2009 - 01:55 (Información del usuario | Enviar un mensaje
|
Hola a todos...
En primer lugar los queria felicitar por su dedicacion. Esta siendo de mucha ayuda para mis trabajos y para toda la comunidad Fox.
Genere un reporte usando el codigo de barras 128 y en la impresion todo salio bien. Através del componente XFRX Listener, intente exportar mi report para la extension *.PDF . En ese caso, estoy con problemas pues el código de barras apresenta un simbolo de una cara en el inicio y el final de código. Supongo que sea por un caracter que no sea reconocido por la fuente. Pero, si fuera de ese modo, no saldria bien ni en la impresion.
Siguiendo los pasos de la pagina http://www.eqeus.com/files/XFRXDevGuide.htm#_Toc168823884, coloque el comentário #UR INCLUDEFONT PR_Barcode_128, pero no funciono tambien.
¿Alguien a pasado por eso? Qualquier informacion es de gran ajuda.
Abrazo!
|
Re: Códigos de barra 128 con lectura humana
por geonet (migaita@ethernet.com)
en 24 Feb, 2010 - 02:08 (Información del usuario | Enviar un mensaje
|
Sinceramente los felicito, he probado estos articulos y funcionan ok, pero por lo menos tenemos aqui en la empresa una necesidad y es que deseamos imprimir los codigos de barras verticalmente actualmente salen asi: ||||||||, pero ahora queremos que salgan impreso asi:===, es decir cambiando la orientacion de impresion, porque? porque la cabeza de impresion de las misma impresoras se dañan y entonces la impresion comienza a "comerce las lineas de las barras" o eliminar algunas barras del codigo al imprmirse.
Tenemos Visual FoxPro v.8.0, y no he podido lograr que salgan impresas estas etiquetas en forma vertical.
Gracias, en lo que puedan ayudarnos.
|
|