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](http://twitter.com/ralgozino) y su blog donde esta la fuente de esta script [Generando Certificados / Diplomas con Python + rst2pdf](http://ralgozino.wordpress.com/2012/04/20/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 (poco publico la adaptacion a python 3) como Debian, Fedora, Ubuntu, Linux Mint DE, etc.
- Usar la terminal
- Instalar o disponer del paquete rst2pdf en cualquier distribucion 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 aqui en la [wikipedia](http://es.wikipedia.org/wiki/ReStructuredText), 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 basica.
- 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. Descargarmos el archivo ScriptCertificados.tar.gz de mi enlace de Descarga sea:
- [Dropbox](https://www.dropbox.com/s/xvyzn89m3730jjc/ScriptCertificados.tar.gz?dl=0)
- [Copy](https://copy.com/ONuxDrTzuN7V)

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 haran 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 sento a escuchar al primero, y.
- finalmente un *Colaborador* quien trabaja para la parte organizativa y queria su certificado como colaborador.
En este archivo vemos 4 variables separadas con comas, y podriamos 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:

> sam@localhost:~/python2/certificados$ 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 teoria pueden usar cualquier archivo de imagen, yo solohasta ahora he usado archivos con extension 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 (vease 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) +’.’
>
Como aprecian (o no es necesario saber tanto y el codigo se explica por si mismo) dicha script toma los datos del archivo asistentes.csv hace un subprocess con un pipe para usar los datos del archivo *certificado.rst*

Al final nos crea un archivo pdf en la carpeta del mismo nombre (vea punto 3) con el nombre del numero de cedula para facilitar la busqueda del mismo si se tiene a la mano.

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

Ayudame a subir mas contenido, acepta una invitación a Copy clickeando [aqui](https://copy.com?r=7djwz3) y crea tu cuenta y contribuyes a subir material.

Show your support

Clapping shows how much you appreciated Samuel David’s story.