javascript

Códigos de barras con JavaScript usando JSBarcode

Códigos de barras con JavaScript

En este post te voy a mostrar algunos ejemplos y usos de la librería JsBarcode para generar códigos de barras en elementos HTML usando JavaScript.

Vamos a generar códigos de barras con JavaScript en 3 elementos:

  1. SVG
  2. Canvas
  3. Imagen

Si deseas mantener la calidad del código de barras, recomiendo que uses el formato SVG.

Nota: esta librería no necesita otras librerías o dependencias, funciona con JavaScript puro y por lo tanto se puede usar en cualquier proyecto de JavaScript.

Incluir librería de JSBarcode

Para comenzar a usar esta librería de generación de códigos de barras en JavaScript hay que incluir el script.

En mi caso incluiré el siguiente:

https://cdn.jsdelivr.net/npm/jsbarcode@3.11.0/dist/JsBarcode.all.min.js

Como ves, es la versión 3.11.0, si quieres una versión actualizada cuando visites este post, mira el repositorio en GitHub en el apartado de navegadores.

Ahora que hayas incluido el script, tienes el objeto JSBarcode disponible globalmente.

Generación de códigos de barras

Para que JSBarcode funcione, existen dos formas.

Método 1 – Especificando con JavaScript

La primera es especificar un elemento con un id para después recuperarlo con JSBarcode.

Veamos el ejemplo. Primero debes definir el elemento en el HTML:

<img id="codigo"/>

Tiene el id codigo. Después, en el script:

/**
 * Ejemplos de uso de JsBarcode
 * 
 * @author parzibyte
 * 
 * https://parzibyte.me/blog
 */JsBarcode("#codigo", "123456");

Invocamos a JSBarcode y le pasamos el selector CSS. Como segundo argumento indicamos el valor que tendrá el código de barras.

La salida es:

Ejemplo de generación de código de barras sobre una imagen (elemento img)

Nota: el método JSBarcode acepta un tercer argumento con opciones del código de barras. Lo veremos más adelante.

Método 2 – Con atributos HTML

Si quieres dibujar el barcode sin especificarlo con JavaScript, puedes especificar los atributos con los data-* atributos.

Este método me parece mejor cuando tenemos elementos dinámicos o dibujados en el lado del servidor.

Vamos a ver un ejemplo. Voy a poner 3 elementos de imagen con códigos distintos y algunos atributos:

<img data-value="12345" data-text="Soy el texto" class="codigo"/>
<img data-value="666" class="codigo"/>
<img data-value="ABCDEF" class="codigo"/>

Ahora tenemos 3 imágenes, todas tienen la clase codigo. Tenemos algunos atributos interesantes como data-value que es el código de barras, o data-text que es el texto que se muestra bajo el código de barras.

De cualquier modo, las 3 serán renderizadas en el script:

/**
 * Ejemplos de uso de JsBarcode
 * 
 * @author parzibyte
 * 
 * https://parzibyte.me/blog
 */JsBarcode(".codigo").init();

De nuevo estamos usando un selector CSS. Tomamos aquellos elementos que tengan la clase codigo y llamamos a init. Esto hará que se muestren los códigos de barras, usando los atributos definidos en el HTML.

El resultado es el siguiente:

Códigos de barras en imágenes usando JavaScript. Los valores se especifican en los atributos data-*

Estos son los métodos que existen. Puedes usar el que tú quieras. Ahora pasaremos a ver opciones de elementos y personalización de códigos de barras con JavaScript.

Generar código de barras en imagen (etiqueta img)

Como vimos en los ejemplos, los códigos de barras se pueden dibujar en imágenes. Lo que no me gustó de esto (basado en mi experiencia) es que al imprimirlas se distorsionan, en cambio con SVG no pasa esto.

Códigos de barras con JavaScript usando SVG

Recomiendo este enfoque, pues el código de barras igualmente se mostrará como los demás, pero con la ventaja de que será un vector escalable que no pierde calidad.

Para hacerlo, los dos métodos explicados anteriormente son válidos. Voy a poner un ejemplo, definimos el elemento:

<svg data-value="12345" data-text="Soy el texto" class="codigo"/></svg>

Como estoy usando el segundo método, en el Script se hace esto:

/**
 * Ejemplos de uso de JsBarcode
 * 
 * @author parzibyte
 * 
 * https://parzibyte.me/blog
 */JsBarcode(".codigo").init();

Con la ventaja de que ahora el código de barras será dibujado en un elemento SVG preservando su calidad.

La desventaja de esto es que no se pueden generar códigos SVG usando los atributos data-*.

Códigos de barras con JavaScript usando Canvas

Lo mismo aplica con Canvas. Este método de igual manera no preserva la calidad al hacer zoom o imprimir, pero tiene la ventaja de que es un canvas que se puede, por ejemplo, convertir a imagen y descargar.

Definimos el elemento:

<canvas data-value="12345" data-text="Soy el texto" class="codigo"></canvas>

Usando el mismo script:

/**
 * Ejemplos de uso de JsBarcode
 * 
 * @author parzibyte
 * 
 * https://parzibyte.me/blog
 */JsBarcode(".codigo").init();

En este caso el código de barras se coloca sobre un canvas.

Opciones del código de barras

Veamos algunas opciones que podemos personalizar con JSBarcode. Pondré todas (exceptuando la de flat pues esa es de otro formato):

/**
 * Ejemplos de uso de JsBarcode
 * 
 * @author parzibyte
 * 
 * https://parzibyte.me/blog
 */JsBarcode(".codigo")
 .options({
  format: "CODE128",// El formato
  width: 2, // La anchura de cada barra
  height: 30, // La altura del código
  displayValue: true, // ¿Mostrar el valor (como texto) del código de barras?
  text: "Hola", // Texto (no código) que acompaña al barcode
  fontOptions: "bold", // Opciones de la fuente del texto del barcode
  textAlign: "left", // En dónde poner el texto. center, left o right
  textPosition: "top", // Poner el texto arriba (top) o abajo (bottom)
  textMargin: 10, // Margen entre el texto y el código de barras
  fontSize: 8, // Tamaño de la fuente
  background: "#8bc34a", // Color de fondo
  lineColor: "#FF0000", // Color de cada barra
  marginTop: 10, // Margen superior
  marginRight: 10, // Margen derecho
  marginBottom: 5, // Margen inferior
  marginLeft: 35, // Margen izquierdo
 })
 .init();

Cada opción tiene su comentario. Estas opciones pueden ser especificadas cuando usamos JSBarcode para un solo elemento, así:

JSBarcode(selector_elemento, código, opciones);

También se pueden especificar a través de los data-* atributos en el HTML. Por ejemplo, para el background:

data-background="#8bc34a"

O para el textPosition:

data-textPosition="top"

En este caso puse solo un elemento:

<canvas data-value="12345" class="codigo"></canvas>

El resultado es el siguiente:

Sé que no es la mejor combinación, solo estoy mostrando las opciones que tiene el código de barras.

Nota: para los colores, además de usar la notación hexadecimal, puedes usar nombres como “black” o “red”.

Otro ejemplo: códigos de barras de productos

Para mostrar un ejemplo completo voy a dibujar algunos códigos de barras de determinados productos.

El HTML es el siguiente, en donde definimos un contenedor de los códigos de barras:

<!DOCTYPE html>
<html>

<head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width">
 <title>Códigos de barras con JavaScript</title>
 <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
  crossorigin="anonymous">

</head>

<body>

 <main role="main" class="container">
  <div class="row">
   <div class="col-12" id="app">
    <h1>Códigos de barras de productos</h1>
    <a href="//parzibyte.me/blog">By Parzibyte</a>
    <br>
    <div id="contenedor"></div>
   </div>
  </div>
 </main>
 <script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.0/dist/JsBarcode.all.min.js"></script>
 <script src="script.js"></script>
</body>

En el script tenemos un arreglo de productos. Lo declaramos y por cada producto agregamos un elemento al contenedor, colocando los atributos data- a través de dataset.

/**
 * Ejemplos de uso de JsBarcode
 * 
 * @author parzibyte
 * 
 * https://parzibyte.me/blog
 */
const productos = [
 {
  nombre: "Mouse Logitech",
  precio: 20,
  codigo: "123",
 },
 {
  nombre: "Xiaomi Mi A1",
  precio: 5000,
  codigo: "123444",
 },
 {
  nombre: "Galletas",
  precio: 10,
  codigo: "20205",
 },
 {
  nombre: "Computadora portátil",
  precio: 30000,
  codigo: "7700545",
 },
];

const $contenedor = document.querySelector("#contenedor");

// Por cada producto, crear un SVG y adjuntarlo

productos.forEach(producto => {
 const elemento = document.createElement("img");
 elemento.dataset.format = "CODE128";
 elemento.dataset.value = producto.codigo;
 elemento.dataset.text = producto.nombre + " $" + producto.precio.toFixed(2);
 elemento.classList.add("codigo");
 $contenedor.appendChild(elemento);
});
// Al final, inicializamos
JsBarcode(".codigo").init();

Gracias a eso, el código de barras tendrá el valor del código del producto, pero su texto será el nombre del producto así como su precio.

La clase codigo se agrega con classList.add

Finalmente se hace el init de JSBarcode. El resultado es:

Códigos de barras para productos, usando JSBarcode y un arreglo

Aprende más sobre JavaScript o HTML en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.