Data entry, Marketing Digital, programacion, python, Software Libre

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

Esta semana no traigo nada nuevo, no obstante me puse a revisar una Script que otro bloguero publicó hace unos años atrás sobre la generación masiva de certificados o diplomas  de asistencias para eventos, cursos, talleres donde se espera una asistencia de muchas personas, esto pueden varias de diez o mil, quien sabe….

Dentro de poco se acerca un evento que se da en toda Latinoamerica que es el Festival Latinoamericano de Instalación de Software Libre o bien también conocido como FLISOL en donde asisten personas que van a que le instales sistemas libres de forma gratuita en sus computadoras o bien para escuchar y/o participar en diversas charlas o talleres.

Es bien sabido que algunos de estos eventos los asistentes exigen o bien los organizadores emiten algun certificado de asistencia, pero hay pocos manuales en la web documentados para hacerlo, esta ejemplo, pyploma otro que se hace con python + Apache OpenOffice entre otros, algunos complicados dependiendo del nivel del programador y que exigen algun conocimiento.

Este que presento no es nuevo como dije  antes, ya lo habian publicado en el año 2014 en blogspot y el original pertenece a Ramiro Algozino  me parece recomendable revisarlo de nuevo y ponerlo a disposición para personas con pocos niveles de conocimiento en programación puedan usarlo para los diversos eventos que puedan tener.

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 términos de la licencia GPL v3. la intención es también para personas que no tengan mucho conocimiento de programación o se estén 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  como Debian, Fedora, Ubuntu, Linux Mint DE, etc, yo estoy usando en este momento la versión Debian 9

– 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, si llevas un registro con tus asistentes, sus nombres, apellidos, cédula o DNI, y la calidad de asistencia a tu evento (participante, ponente, conferenciante, asistente, colaborador, etc)  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*” como el siguiente ejemploen la imagen:

asistentes-csv

$ cat asistentes.csv
Ponente,Manrique,Enrique,V-15.654.321
Asistente,Adams,Jhon,E-81.345.678
Colaborador,Escalona,Vanessa,V-98.765.432

– Un diseño de certificado a tu gusto certificado.svg, o bien 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, En este tutorial dejo el archivo svg descargable, para que pueda ser editado con tus datos de tu evento en Inkscape, pero antes sugiero usar mi modelo para cambiar los datos, a menos que usted sepa lo que esta haciendo.certificado

En la imagen de la derecha dejo un ejemplo del certificado, si vas a usar el SVG que proporciono, y no sabes mucho de programación, edita todo el certificado, pero la parte sombreada en gris, dejala como esta ya que ahi es donde la script colocará los datos del archivo csv.
Comencemos..

1. Descargamos el archivo ScriptCertificados.tar.gz de mi enlace de Descarga sea:
Google Drive

Github

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.png  <—solo de ejemplo
certificados/estilo.style
certificados/asistentes.csv
certificados/generar_certificados.py~
certificados/README
certificados/generar_certificados.py
certificados/certificado.png
certificados/certificado.rst

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,Adams,Jhon,E-81.345.678
Colaborador,Escalona,Vanessa,V-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
– cédula = asistente[3] su documento de identidad

3. Creamos una carpeta nueva dentro de certificados y la llamaremos *pdf* aqui es donde se crearan los pdf a compartir.

 $ mkdir pdf/

4. Veamos el archivo *certificado.rst* este es quien nos dará los parámetros para generar el certificado de asistencia;

{1} {2}, *Cédula* {3}

.. raw:: pdf

Spacer 0,55

Quien asistió en calidad de: {0}

NOTA: Si no saben maquetar archivos RST no modifquen los parametros, dejenlo como está

5. certificado.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 ustedes 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 certificado.png (véase punto anterior).

{
“pageSetup” : {
“firstTemplate”: “Fondo”
},

“styles” : [
[“normal” , {
“fontSize”: 28
}]
],

“pageTemplates” : {
“Fondo”: {
“frames”: [
[“550px”, “-810px”, “100%”, “100%”]
],
“background” : “certificado.png”
}
}
}

Sugerencia si no sabes sobre stylesheet, NO LO MODIFIQUES solo cambia el nombre del archivo png de tu archivo de imagen

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 subprocessprint ‘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.pdfAl 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.

Pantalla terminal
Todos estos archivos quedaran generados en la carpeta  ~pdf/  y el tiempo que tomará la script en ejecutar sera dependiendo del rendimiento de tu computador como la memoria RAM y el espacio disponible, puedes poner diez registros  o un millon y el lo hara todo:
El resultado final seran estos archivos pdf

E-81.345.678V-15.654.321V-98.765.432

Happy Hacking y no olvides comentar
Mazel Tov!

 

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s