Creando los carnets del alumnado con software libre

La identificación de alumnado en un centro educativo suele ser un elemento crucial, especialmente en centros grandes en los que hay que llevar un control de entradas y salidas. A esto hay que sumarle la complejidad añadida de los centros en los que se imparten enseñanzas postobligatorias, en las que el alumnado suele ser mayor de edad y, por tanto, puede salir del centro durante la jornada lectiva.

Durante años, la técnica del carnet escrito a mano con la foto pegada y todo ello plastificado, ha sido una de las soluciones más socorrida. No obstante, la elaboración de estos carnets es bastante laboriosa, ya que se hacen artesanalmente uno por uno. Esto, en centros grandes (>1000 alumnos) suele ser una tarea bastante tediosa.

Por ello, durante el curso pasado estuve buscando algún software que pudiese automatizar el proceso de creación de carnets a partir de la información proporcionada por el software de gestión de centros. Esto limitaba bastante las opciones, ya que:

  • El software sólo exporta datos del alumnado en CSV (fichero de texto, con los datos organizados en campos separados por comas), sin fotos.
  • No existe ninguna manera de descargar todas las fotos del alumnado.

Además de todo eso, se añadía una tercera limitación, esta autoimpuesta, y es el hecho de que se quiere utilizar una impresora láser a color del centro para llevar a cabo la impresión. Así, los datos del alumnado no se ceden a terceras personas ajenas al centro para la generación de las tarjetas.

La existencia de estas restricciones, junto al hecho de que todo el software propietario que encontré en Internet, de una forma u otra, no acababa de encajar con alguna de ellas, me llevaron a idear un proceso que, con la ayuda de una curiosa herramienta de software libre, me permitiesen crear todos los carnets en pocos segundos.

Un generador de cartas de rol

La pieza clave del proceso es un software libre llamado HCCD – HTML+CSS Card Designer, cuya finalidad original es la de diseñar cartas personalizadas para juegos de rol. En realidad se trata de un combinador de datos: coge un fichero CVS con la inforamación de las diferentes cartas y una plantilla gráfica realizada en HTML y CSS, y genera todas las cartas del juego siguiendo el patrón de la plantilla.

Esquema de funcionamiento de HCCD

Más información sobre HCCD en github: https://github.com/vaemendis/hccd

La idea para usar este programa para generar carnets de alumnos es simple: utilizo HCCD para generar las tarjetas del alumnado, sustituyendo la información de poderes, fuerza y magia, simplemente por su nombre, curso y si es mayor o menor de edad. Luego, hago el diseño del carnet en HTML+CSS y le doy a generar. En unos pocos segundos, tengo todos los carnets generados en la pantalla.

Carnet de menor de edad y de mayor de edad

A partir de la información del CSV, determino si el alumno es mayor o menor de edad y juego con los colores, para diferenciar fácilmente los carnets en la puerta.

Como detalle adicional, en el carnet de menor de edad, he añadido un patrón de fondo, para dificultar su alteración para hacerlo pasar por un carnet de mayor de edad.

Funcionamiento de HCCD

Cuando descargamos HCCD encontramos una carpeta con ejemplos de uso, lo mejor es partir de ahí para empezar a trabajar:

card.csv: Este archivo CSV contiene los datos que se generarán. Previamente, he organizado la información del CSV obtenido por el software de gestión en LibreOffice Calc (software libre), poniendo los nombres que aparecen entre llaves como encabezado de columna. Una vez tengo las columnas que necesito, lo he guardado como CSV otra vez.

card.html: Archivo HTML que contiene la distribución de contenidos de un carnet. Esta distribución es la que se replicará para cada uno de los carnets una vez se ejecute HCCD. Podemos modificar el diseño entre los comentarios

<!-- YOUR CUSTOM CODE STARTS HERE -->

y

 <!-- YOUR CUSTOM CODE ENDS HERE -->

Todo lo que modifiquemos fuera de esas etiquetas, será ignorado por HCCD al generar los carnets.

Los datos que se han de extraer del CSV se ponenen entre dobles llaves. A continuación, muestro un ejemplo de un HTML preparado para hacer carnets.

<!doctype html>
<html>
   
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta>
    <link rel="stylesheet" type="text/css" href="unit.css">
</head>

<body>
    <div class="card">
        <!-- YOUR CUSTOM CODE STARTS HERE -->
      <div class="bg{{Menor}}">
      <script src="JsBarcode.all.min.js"></script>
      <header class="h{{Menor}}">ESTUDIANT {{Curs}}</header>
      <img src="img-NIA/{{NIA}}.png" alt="image" onerror="this.src='no-foto.jpg';"/>
      <div class="nombre"><span>{{Nom}}</span> {{Cognom 1}} {{Cognom 2}}</div>
      <div class="grupo">{{Grup}}</div>
      <div> <svg id="b{{NIA}}"></svg> </div> 
      <script>
                JsBarcode("#b{{NIA}}", "{{NIA}}", {
                  lineColor: "#000",
                  width: 2,
                  height: 20,
                  fontSize: 12,
                  margin: 0,
                  displayValue: true
                });

      </script>
      <div class="aviso {{Menor}}">
        NO POT EIXIR DURANT EL PERIODE LECTIU NI PATIS
      </div>
      <div class="curs{{Menor}}">
        CURS2021
      </div>
      <footer> 
        <div class="ies">NOM IES</div>
        <div class="mini">Dir IES - 46000 València</div>
        <div class="mini">96 000 00 00 - 00000000@mailies.es</div>
      </footer> 
    </div>
        <!-- YOUR CUSTOM CODE ENDS HERE -->
    </div>
</body>

</html>

card.css: Aquí es donde vamos a definir el aspecto, colores y ubicación de los elementos gráficos del carnet. Para ello, usaremos CSS, como si se tratase de una página web.

hccd.jar: Este es el programa que combina todo lo anterior. Necesita que JAVA esté instalado en el sistema para funcionar. Para ponerlo en marcha, basta con escribir los siguiente en un terminal:

java -jar hccd.jar

Eso abrirá la ventana de HCCD, a la que tan solo tendremos que arrastrar nuestro CSV. El resultado será un archivo llamado card-GENERATED.html en el que encontraremos todos los carnets creados, resultado de la combinación de los datos del CSV con la distribución del HTML y el aspecto gráfico definido en el CSS.

Un detalle muy interesante de HCCD es que está pendiente de los cambios en los tres archivos CSV, HTML y CSS. Cuando hacemos una modificación en alguno de ellos y guardamos, automáticamente vuelve a generar card-GENERATED.html aplicando las novedades.

Código de barras con el ID

Preparando el diseño, pensé que podía ser interesante incluir un código de barras con el identificador del alumno. Además de en la puerta, otro sitio en el que utiliza mucho el carnet de estudiante es en la biblioteca, para el préstamo. En las bibliotecas de centros es habitual tener un lector de código de barras para leer las etiquetas de los libros. Pues bien, con un código de barras en el carnet del alumnado se podría agilizar el proceso de préstamo, tal y como se hace en las bibliotecas públicas.

Puesto que el diseño del carnet se hace en HTML, se puede introducir cualquier componente compatible con una página web, también un código javascript. Eso es lo que he hecho para conseguir que, a partir del identificador del alumno, se genere un código de barras que puede ser muy útil para el préstamo de libros en biblioteca.

Para ello, he utilizado la libreria jsBarcode, que proporciona una función que genera un código de barras a partir de un número.

Más información en jsBarcode en github: https://github.com/lindell/JsBarcode

Obteniendo las fotos del alumnado

Llegados a este punto, nos encontramos con el problema de las fotos de los alumnos: el CSV que exporta el software de gestión de centros, no incluye la foto y HCCD necesita un archivo con la foto del/la alumno/a al que hacer referencia.

Un carnet sin foto no tiene mucho sentido, y para ello, es necesario descargar todas las fotos del alumnado a una carpeta del disco en el que se ejecuta HCCD. Pero esa no es una opción que proporcione el software de gestión, ¿recordáis?

Sin embargo, lo que sí proporciona este software es un documento en PDF con las fichas del alumnado; una ficha por página. Y sí, en la ficha está el identificador del alumno y su foto.

Así que, de nuevo, hay que recurrir al software libre. El formato PDF es complicado de procesar automáticamente, ya que es un archivo binario. Por eso, un paso previo sería convertir esas fichas a un formato textual, más manipulable, como HTML.

En concreto, la solución pasa por crear un script de GNU/Linux, que convierta el PDF a un HTML y después, vaya ficha a ficha, cogiendo el identificador, recortando la imagen y guardándola con el identificador como nombre de la imagen. Este proceso es un poco más entretenido y, aunque se haga automáticamente, puede tardar varios minutos.

Además, es requisito previo que todas las fotos del alumnado estén registradas en el software de gestión, para lo que será necesario un trabajo previo, durante la matrícula. Pero esa es otra historia.

Volvamos al script que obtene las fotos a partir de las fichas en PDF y al que he bautizado como pdf3nia. Este script hace uso de la herramienta de software libre pdf2html junto al potente comando convert de Imagemagick. Os pongo el enlace de descarga del script generado, por si os interesa:

Más información sobre pdf2html en github: https://github.com/shebinleo/pdf2html

Imprimiendo los carnets

Una vez generados todos los carnets, con su imagen y su código de barras, sólo queda imprimirlos. HCCD genera todos los carnets en una página HTML inmensa. Afortunadamente, el programa nos ofrece la opción de determinar cuántas cartas habrá en cada página, para facilitar la impresión forzando el salto de línea cuando toque (y evitando que se queden carnets cortados entre dos páginas).

Los campos rows y columns son fundamentales para una buena impresión.

Yo, por las dimensiones de mis carnets sacó unos 10 carnets por página en dos filas de cinco columnas, pero todo dependerá del tamaño y diseño de las tarjetas.

Así, la impresión se hace directamente del navegador (el HTML generado por HCCD) a la impresora a color. Para estas impresiones, se utiliza papel grueso tipo cartulina (A4, 120g).

El postproceso es el guillotinado de los carnets (están alineados, así que se pueden hacer varias páginas de golpe) y el plastificado individual (usando tarjetas de plastificado individuales tamaño NIF). Esta última parte es la más entretenida, pero bueno, ¡no todo iba a ser darle a un botón!

Conclusiones

Para implementar la solución, se han utilizado de manera combinada varias herramientas de código abierto disponibles de forma gratuita en Internet:

Herramientas utilizadas

Respecto al resultado, este sistema esta siendo utilizado durante el presente curso para generar los carnets. De la experiencia se pueden extraer algunos puntos positivos y negativos. Los puntos a favor del sistema son los siguientes:

  • Generación inmediata de grupos enteros.
  • Regeneración rápida de carnets sueltos (además, el alumnado no ha de traer de nuevo una foto).
  • Diseño más profesional y atractivo del carnet.
  • Inclusión de código de barras con el identificador de alumno/a
  • Una vez está el diseño hecho, basta con ejecutar HCCD y guardar el fichero CSV para que se generen los carnets automáticamente.
  • Software Libre, totalmente modificable para adaptarse a las necesidades de cada centro.

Pero, como todo, aún hay aspectos de este proceso que hay que pulir:

  • Necesidad de conocimientos medios/avanzados de informática para realizar el diseño inicial y combinar el uso de las herramientas implicadas en el proceso (pdf2nia, diseño CSS del carnet, etc.)
  • Las fotos no siempre están disponibles en el programa de gestión de centros y, escanearlas a veces es tan laborioso como hacer los carnets a mano.
  • No es un programa específico, sino la combinación de varios programas, lo que hace el proceso más complejo que en las soluciones propietarias cerradas.

En cualquier caso, este pequeño proyecto es una muestra más de lo que se puede hacer combinando varias herramientas de software libre de las muchas que hay disponibles en la red.