lunes, 15 de septiembre de 2014

Generando Certificados / Diplomas con Python + rst2pdf para eventos en Venezuela

Modificacion de  la fuente original publicada por Ramiro Algozino.

Hace un tiempo atras, me vi en la necesidad de realizar un evento de Software Libre, que necesitaba emitir certificados de asistencia a dicho evento, gracias a el amigo Ralgozino  y su blog donde esta la fuente de esta script Generando Certificados / Diplomas con Python + rst2pdf pude crear una adaptación para Venezuela de dicha script, ya que aunque no es necesario, en los Eventos de cualquier índole en este pais, requiere colocar el numero de cédula o pasaporte para su debida validez.

Este tutorial esta realizado para venezolanos, aunque no es limitativo ya que es software libre y cualquiera lo puede modificar y redistribuir bajo los terminos de la licencia GPL v3. la intención es tambien para personas que no tengan mucho conocimiento de programación o se esten iniciando en el lenguaje de programación python y quieran hacer sus pruebas, pero es mas que todo para aquellos que tengan una necesidad de emitir certificados de forma masiva sea por ejemplo:
- Eventos de software libre
- Cursos
- Formación y
- cualquier actividad que requiera una impresión masiva de certificados.

Pasos necesarios para el uso de esta script
- Usar cualquier distribución Linux que maneje python 2.x (mas adelante publicaré la adaptación a python 3) como Debian, Fedora, Ubuntu, Linux Mint DE, etc.

- Usar la terminal, vamos que no come gente.

-  Instalar o disponer del paquete rst2pdf en cualquier distribución linux se consigue, sin embargo en Debian si no la tienes instalada ejecutar lo siguiente
  $ sudo aptitude install rst2pdf
- Manejo de archivos RST que es un formato de archivo de texto, si quieres documentarte en el manejo de este formato mira aquí en la wikipedia, pero no te compliques aun, si sigues los pasos de este tutorial podrás tener un certificado acorde a lo que necesitas al menos de forma básica.

- Un listado de personas, en este caso si te facilitan un listado hecho en hoja de calculo hecha con LibreOffice Calc o Microsoft Office Excel, debes convertir guardando en el menu archivo => guardar como => archivo csv en el que usaremos para esta script debemos llamarlo "*asistentes.csv*"

- Un diseño de certificado a tu gusto, debes hablar con tu diseñador, pero que definas las coordenada de texto en tu imagen de fondo para que la script, escriba tus datos en él de forma masiva.




Comencemos..

1. Descargamos el archivo ScriptCertificados.tar.gz de mi enlace de Descarga sea:
- Dropbox o en Copy (sin publicidad, no me gusta fileshare ni mega nada de lo demas con publicidad.

2. Una vez descargado lo descomprimimos con el programa que mas guste, yo lo hago en linea de comandos asi y nos queda algo como:
 $ tar -zxvf ScriptCertificados.tar.gz
  certificados/certificado.rst~
 certificados/Pantalla_terminal.jpeg
 certificados/estilo.style
 certificados/asistentes.csv
 certificados/generar_certificados.py~
 certificados/README
 certificados/generar_certificados.py
 certificados/cdd2013.png
 certificados/certificado.rst
 certificados/asistentes.csv~
 certificados/estilo.style~

2.1. Nos genera la carpeta certificados donde nos interesaran modificar y entramos de una vez:
 $ cd certificados
y vemos el contenido en este caso de * asistentes.csv* podemos usar un editor de texto cualquiera, en este caso use via terminal a nano y pudimos observar el siguiente contenido:
 $ cat asistentes.csv
 Ponente,Manrique,Enrique,V-15.654.321
 Asistente,Adans,Jhon,81.345.678
 Colaborador,Escalona,Monika,98.765.432

2.2. Como observamos para este ejemplo, vemos a 3 asistentes, hubiera podido ser mas como 500 personas, pero como esta es una prueba uds. lo harán con estos pocos, con tres roles distintos cada uno.
- un *Ponente* u orador, o speaker, etc,
-una persona del publico como *Asistente* quien fue el oyente que pago su entrada o se sentó a escuchar al primero, y.
- finalmente un *Colaborador*  quien trabaja para la parte organizativa y quería su certificado como colaborador.
En este archivo vemos 4 variables separadas con comas, y podríamos enumerarlas cada una
- calidad = asistente[0] ahí se aprecia si es ponente, asistente o colaborador.
- apellido = asistente[1] Apellido de la persona
- nombre = asistente[2] Nombre de la persona
- cedula = asistente[3] su documento de identidad

3. Creamos una carpeta nueva dentro de certificados y la llamaremos *pdf*
 $ mkdir pdf/

4. Veamos el archivo *certificado.rst* este es quien nos dará los parametros para generar el certificado de asistencia:

$ cat certificado.rst

 {1} {2}, *Cédula* {3}
 .. raw:: pdf
    Spacer 0,55

 {0}

5. cdd2013.png es un archivo de imagen, nuestro certificado modelo que necesita el siguiente archivo para informar a la script a fin de generar el certificado. adjunto la imagen para que uds si no quieren modificar mucho,es para que sepan donde van los campos a usar.

En teoría pueden usar cualquier archivo de imagen, yo solohasta ahora he usado archivos con extensión png y jpg,

6. el archivo *estilo.style* es solo un simple archivo de texto que nos ayudara a colocar el fondo de la presentación, el transpondrá junto con la script el fondo de imagen, en este caso cdd2013.png (véase punto anterior).

7. El siguiente archivo que vamos a revisar es la script y observamos lo siguiente:
#!/usr/bin/env python
#-*- encoding: utf-8 -*-

 from csv import reader
 import subprocess

 print 'Abriendo listado...',
 # Esto se puede poner feo...
 listado = reader(open('asistentes.csv','r'))
 total = len(list(listado))
 listado = reader(open('asistentes.csv','r'))
 print 'listo.'

 print 'Abriendo certificado...',
 certificado = open('certificado.rst').read()
 print 'listo.'

 print listado
 print 'Encontrados', total, 'asistentes:'
 for nro, asistente in enumerate(listado):
     calidad = asistente[0]
     apellido = asistente[1]
     nombre = asistente[2]
     cedula = asistente[3]
     certificado_final = certificado.format(calidad,apellido,nombre,cedula)
 
     print 'Generando certificado para', apellido.upper(), nombre + '...',
 
     p = subprocess.Popen(['rst2pdf',
                         '-s',
                         'estilo.style,freetype-serif,a4-landscape,twelvepoint',
                         '--fit-background-mode=scale',
                         '-o',
                         './pdf/' + cedula + '.pdf'
                         ],
                         stdin=subprocess.PIPE
                         )
     p.stdin.write(certificado_final)
     p.communicate()
     print 'listo', str(nro+1), 'de', str(total) +'.'
8 Para correr la script tenemos dos opciones
8.1) dar permisos de operación (recomendado)

$ sudo chmod +x generar_certificados.py
Luego la ejecutamos directamente:

$./generar_certificados.py


8.2 O bien la ejecutamos con python

$ python generar_certificados.py

Al final nos crea un archivo pdf por cada registro, en la carpeta del mismo nombre (vea punto 3) con el nombre del numero de cédula para facilitar la búsqueda del mismo si se tiene a la mano. 1234567x.pdf

Al final te muestra un reporte donde se aprecia cuantos archivos generó.

la imagen adjunta en el tar.gz llamada *Pantalla_terminal.jpeg* muestra el proceso como corre.



Happy Hacking y no olvides comentar
Mazel Tov!





Ayúdame a subir mas contenido, acepta una invitación a Copy clickeando aqui y crea tu cuenta y contribuyes a subir material.

1 comentario:

  1. Hola. Puedes colocar imagenes del resultado??? No del código, sino el PDF en sí. Gracias

    ResponderEliminar