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:

PHP:
  1. require_once 'Image/Barcode.php';
  2. 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:

PHP:
  1. require_once 'Image/Barcode.php';
  2. Image_Barcode::draw('ControlZeta', 'code128', 'png');

Se nos genera esta otra imagen:

Código de barras alfanumérico con Control Zeta

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:

PHP:
  1. class Image_Barcode_code128 extends Image_Barcode
  2. {
  3. var $_type = 'code128';
  4. var $_barcodeheight = 60;
  5. var $_font = 2;
  6. var $_barwidth = 1;
  7. var $code;
  8.  
  9. ...

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: , , , , ,

26 comentarios para “Generar códigos de barras con PHP y PEAR:Image_Barcode. (Y, sobretodo, como cambiar la altura del código de barras)”

  1. shanky dice:

    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!

  2. cristian dice:

    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

  3. shanky dice:

    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

  4. gaby dice:

    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

  5. gaby dice:

    Hola
    Ya encontré el archivo. Gracias
    Me has ayudado muchísimo.
    Hasta pronto :)

  6. cristian dice:

    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

  7. cristian dice:

    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.

  8. gaby dice:

    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

  9. Cristian dice:

    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.

  10. gaby dice:

    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.

  11. gaby dice:

    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

  12. Gaby dice:

    Hola Cristian.
    Oye de casualidad tu no sabes cómo generar código de barras pero en visual basic.net?
    Muchas Gracias

  13. etiquetas Marcar la ropa niños dice:

    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

  14. Gaby dice:

    ok.
    Muchas gracias Cristian, Así lo haré
    hasta pronto

  15. Gaby dice:

    Hola Cristian.
    Oye cómo le hiciste para generar el código de captcha?
    Saludos

  16. ALEJANDRO GARCES dice:

    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!!!

  17. edu dice:

    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.

  18. desorder dice:

    [...] Generar códigos de barras con PHP y PEAR:Image_Barcode.

  19. parentesys dice:

    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

  20. parentesys dice:

    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

  21. QAOS dice:

    como le hago para generar varios codigos de barras, e ir guardandolos en una BD? espero me puedas ayudar u orientarme un poco gracias

  22. Jorge dice:

    Estimado. me funciona a la perfeccion, pero como lo hago para imprimir esto en una impresora

  23. Gumer dice:

    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 ... ¿?

  24. Cristian dice:

    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

  25. claudia dice:

    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

  26. claudia dice:

    Hola! ya salio! gracias

Deja un comentario

CAPTCHA Image Audio Version
Reload Image