Generar códigos de barras con PHP y PEAR:Image_Barcode. (Y, sobretodo, como cambiar la altura del código de barras)
Ante la necesidad de generar códigos de barras mediante PHP, he encontrado el paquete de PEAR Image_Barcode.
La instalación no puede ser más sencilla en Ubuntu 8.04. Image_Barcode se encuentra en los repositorios en forma de módulo de PHP (php-image-barcode). Ha instalado Pear y Gd como dependencias y ya está.
Con un:
sudo apt-get install php-image-barcode
Ya tenemos instalado todo lo necesario
En caso de no tener hasta ahora Gd, se hace necesario reiniciar apache:
sudo /etc/init.d/apache2 restart
Bien, ahora ya podemos ejecutar el ejemplo que nos dan en la documentación:
-
require_once 'Image/Barcode.php';
-
Image_Barcode::draw('1234', 'int25', 'png');
Nos generará la siguiente imagen:
En nuestro caso necesitamos generar códigos con letras y descripciones, por esta razón utilizamos el tipo de código "code128", quedando el ejemplo de la siguiente manera:
-
require_once 'Image/Barcode.php';
-
Image_Barcode::draw('ControlZeta', 'code128', 'png');
Se nos genera esta otra imagen:
Hasta aquí todo perfecto, pero... Estos códigos son demasiado altos para el uso que se les va a dar, así que necesitamos disminuir el alto del código. Una opción seria modificar directamente la altura de la imagen, pero esto "achataría" el texto inferior. No nos interesa.
Evidentemente hemos ido a la documentación oficial: http://pear.php.net/package/Image_Barcode/docs
Tras no ser capaz de encontrar ningún método para modificar la altura de códigos de barras code128 (cualquier ayuda será bienvenida) he ido directamente a la clase para ver como podía modificar esta altura. Mi sorpresa ha sido no encontrar ningún método que hiciera lo que necesitaba, pero en cambio, me encontrado con esta simple porción de código nada más empezar a leer:
-
class Image_Barcode_code128 extends Image_Barcode
-
{
-
var $_type = 'code128';
-
var $_barcodeheight = 60;
-
var $_font = 2;
-
var $_barwidth = 1;
-
var $code;
-
-
...
Evidentemente, he cambiado el valor $_barcodeheight y todo ha funcionado a la perfección, pero estoy seguro que hay algún motivo para que este valor sea fijo. ¿Alguien tiene alguna explicación al respecto?
Por cierto, el resultado final es este:
Etiquetas: barras, codigo, código de barras, image_barcode, PEAR, PHP
9 de Noviembre de 2008 a las 8:20 pm
Muy interesante el post! Y sobre todo didáctico, ahora me voy a poner a provarlo! Con respecto al hecho de la altura, calculo que debe ser de ese alto (60) por una cuestion de estandares, fijate en el los productos del supermercado que todos tienen un alto igual... ahora para otros fines como boletas etc esto no es necesario... digo yo x supuesto!
salu2!
9 de Noviembre de 2008 a las 8:39 pm
Cualquier duda que encuentres con la generación del código de barras, o para despues imprimir los códigos de barras de los productos en una impresora, puedes postearla que intentaremos ayudarte. Es posible que hayamos tenido los mismos problemas
saludos
10 de Noviembre de 2008 a las 12:32 am
Hola que tal gracias x la respeusta!
Mis dudas son la siguientes...
Veo la facilidad de usar PEAR pero para esto debo tener instalado pear en mi servidor, y mi caso es que no tengo accseso al servidor, x lo que mi duda está en si hay alguna clase o algo parecido de generacion de código de barras sin la necesidad de la instalacion de PEAR o x lo menos no sobre los archivos a los que no tengo accseso en el servidor... :S
y despues me gustaría saber como es posible dictaminar si en el server en el que estoy está o no instalado el PEAR, ya que le hice un phpinfo a mi server y buscé la palabra PEAR y me sale esto:
include_path .:/usr/local/share/pear .:/usr/local/share/pear
open_basedir /vhosts/xxxxxx.com.ar:/vhosts/xxxxxx.com.ar/tmp:{PEAR_DIR} no value
No se si eso significará o no que SI está instalado PEAR... :S
Cualquier ayuda será bien recivida cristian! Salu2
16 de Abril de 2009 a las 10:41 pm
Hola.
Una duda con repecto a la clase;
La agregas al archivo generado en php(el archivo que muestra el codigo de barras) o dónde debemos poner esa clase?
Gracias
Saludos
16 de Abril de 2009 a las 11:05 pm
Hola
Ya encontré el archivo. Gracias
Me has ayudado muchísimo.
Hasta pronto
21 de Abril de 2009 a las 8:34 am
Mensaje de Gaby:
Hola Cristian
Ya vez que para modificar el alto de la imágen del código de barras comentabas que modificaramos la clase que desglozaste en tu blog? bueno pues yo no daba con esa clase hasta que entré al archivo code128 ubicado en ( /usr/share/php/image/Barcode/ ) y ahí vi en efecto la clase que comentabas. y la ajusté y ya. Eso fue todo lo que paso.
Oye de casualidad crees que varíe mucho generar el código de barras en redHat y teniendo el servidor apache en red?
La verdad todavía eso no lo he checado y ya lo necesito.
Muchas gracias
21 de Abril de 2009 a las 8:36 am
Pues al ser una fichero php, es multiplatforma, la generación de códigos de barras se hace mediante unas imágenes, asi que no te va a variar. Siempre que uses el mismo código claro, misma version de clase barcode. Y recomendaría instalar las mismas versiones de PHP Y APACHE, para no tener problemas con el código a nivel de errores.
5 de Mayo de 2009 a las 8:50 pm
Hola Cristián. Oye tengo una duda con respecto al codigo de barras que presentas. Mira lo que pasa es que ya había generado la imágen del c.b y si funcionó, pero ahora el archivo que tiene esa imágen la quiero incluir en una celda dentro de una tabla, en un formulario, y me aparece este error:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/arlex_intranet/inventarios/conexion.php:32) in /usr/share/php/Image/Barcode.php on line 104
‰PNG ??? IHDR???y???&???Úì¦(???PLTE???ÿÿÿ¥ÙŸÝ???XIDAT(‘cøºzº NoÏ,c©"?Íÿ £ƒT?à8Èÿ÷q?²ÀýòŸwËQ¾þýŽ,p¸üïç÷(*xdÿÞG¨ÿûw?šÀÝzkë?$³ãu>?ûy$žîµ????IEND®B`‚
Y si incluyo el archivo fuera del formulario me da solo la imágen sin el formulario.
No sabes cuál será el problema Cristián?
Gracias
Saludos
6 de Mayo de 2009 a las 5:18 pm
El problema no es con la clase que genera la imagen. Sino es un fallo tipico de php, resulta que para poder mostrar una imagen en php, se debe enviar una cabecera mediante al funcion header(''); de php indicandole que lo que vas a enseñar es una imagen del tipo gif, bmp, png, etc. Le debes de indicar lo que se llama el mime-type. Sobre todo, no puedes enseñar nada mas por pantalla antes de enviar el contenido de la imagen.
Entonces, para enseñar la imagen dentro de una página html o dentro de una celda, lo que deberas hacer es. meter un tag img con una url que genere la imagen solamente.
6 de Mayo de 2009 a las 9:03 pm
Hola Cristián.
Muchísimas gracias. Ya la pude poner con lo que me dijiste. Es que como todavía no sé muy bien. Se me olvida como se deben poner las imágenes en html.
Gracias nuevamente. Me sacaste de un problema.
Hasta pronto.
6 de Mayo de 2009 a las 11:31 pm
Hola Cristián.
Oye por ejemplo yo voy a ocupar ese código de barras para ir generando un folio, es decir, que cuando se envíe el formulario me ponga la imágen del c.b y el numero de folio correspondiente( es decir que se vaya incrementando el folio cada vez que se envíe el formulario)
De casualidad tu no sabrás cómo ir generandolo, lo que pasa es que pongo (en el archivo donde está el código de la imágen en php) hago una consulta a la base de datos para obtener el folio y la pongo en una variable, pero no me funciona.
Perdon por molestarte tanto.
Saludos
Y de antemano muchas gracias
8 de Julio de 2009 a las 4:05 pm
Hola Cristian.
Oye de casualidad tu no sabes cómo generar código de barras pero en visual basic.net?
Muchas Gracias
8 de Julio de 2009 a las 4:26 pm
Hola Gaby,
Pues para hacer algo similar desde VB 6 había utilzado tipografias de fuentes, que simulan codigos de barras de tal manera que instalas las fuentes en el sistema y tu imprimes el número que quieres con el tipo de fuente "codigo de barras" tiene otro nombre, te tocará buscarlo, no lo recuerdo...
pero por barcado fonts seguro que encuentras muchas cosas...
Si lo encuntras estaremos agradecido a que lo postees aqui...
un saludo.
cristian
cristian
9 de Julio de 2009 a las 7:53 pm
ok.
Muchas gracias Cristian, Así lo haré
hasta pronto
14 de Julio de 2009 a las 4:35 pm
Hola Cristian.
Oye cómo le hiciste para generar el código de captcha?
Saludos
18 de Julio de 2009 a las 9:33 am
Hola, que tal! podrías poner un ejemplo del Header? . Lo que pasa es que debo poner el codigo de barras en un recibo, el recibo lo genero con PHP y HTML, pero aparece el problema del Header.... Como puedo combinar texto y código de barras en la misma página?
Gracias de antemano por el apoyo y saludos!!!
12 de Agosto de 2009 a las 4:25 pm
Hola Alejandro, imagino que es tarde para ti, pero dejo la respuesta por si alguien llega aquí viendo tu pregunta:
La clase con el código de barras genera imágenes, por lo tanto puedes hacer una llamada al fichero .php que genera la imagen como si fuera un fichero .jpg o cualquier otro tipo de imagen. Es decir, si en el fichero donde tienes todo el texto del recibo incrustas una imagen y dentro del src="" del tag introduces el .php que genera el código de barras, verás el código de barras en el recibo, con el resto del texto.
Un saludo.
16 de Enero de 2010 a las 2:02 pm
[...] Generar códigos de barras con PHP y PEAR:Image_Barcode.
5 de Octubre de 2010 a las 1:39 pm
Aquí tengo un ejemplo de todo esto que hemos visto antes, sobre la generación de códigos de barra con PHP. Funciona muy bien.
http://www.parentesys.es/Generador-de-codigos-de-barras-en-PHP-36934
saludos
8 de Octubre de 2010 a las 10:43 am
Veo que hay muchas dudas por aquí: Lo primero que hay que hacer es instalar el módulo Image_Barcode, con pear, por ejemplo. Luego, también ercomiendo el paquete PHP_Compat, para evitar incompatibilidades de versión del PHP, y por último implementarlo en nuestras páginas PHP.
En la siguiente url explico paso a paso, y pongo ejemplo práctico para conseguir los códigos de barras con PHP.
Pulsa sobre mi nombre para ir a este enlace:
http://www.parentesys.es/Generador-de-codigos-de-barras-en-PHP-36934
27 de Julio de 2011 a las 5:11 pm
como le hago para generar varios codigos de barras, e ir guardandolos en una BD? espero me puedas ayudar u orientarme un poco gracias
24 de Septiembre de 2011 a las 5:32 am
Estimado. me funciona a la perfeccion, pero como lo hago para imprimir esto en una impresora
28 de Noviembre de 2011 a las 10:12 pm
HOLA maestro ... me SALIO... y se me caen lagrimas por lo ojitos jop que bonito... bueno bueno ahora si, la pregunta... como ago para que se rote 90º, por que no me sirve a lo largo, lo necesito a lo alto ... ¿?
21 de Agosto de 2012 a las 9:21 pm
Es una imagen, ahora rotarla casi desde css podras hacerlo.
para la impresion es algo mas complejo, pues directamente desde el navegador esta algo mas complicado. se deberá enviar a una impresora en la nube por ejemplo haber si hay algo por internet sobre eso
31 de Agosto de 2012 a las 1:27 am
Hola, tengo que colocar el codigo de barra en un formulario html, me dio el errar del header, lo puse con el tag img, pero sigue sin mostrar la imagen ..:(, me podrias dar un ejemplo de como poner la sentencia con el tag img? Gracias
31 de Agosto de 2012 a las 3:40 am
Hola! ya salio! gracias