07
jul
11

Pyploma: Generador de diplomas en LaTeX a partir de una lista de datos


ACTUALIZACIÓN 14/9/2012: He desarrollado una versión de Pyploma con GUI. Si estás interesado en probarla, visita el repositorio del proyecto en Github.

Durante los últimos meses he participado en la organización de un ciclo de conferencias en la facultad. Una vez finalizado y tras la evaluación de los asistentes era el momento de realizar los diplomas. Los habituales lectores de este humilde blog ya sabréis que soy amante de las soluciones elegantes, así que me lancé a escribir un programita que generara los diplomas en formato LaTeX de forma automática y luego los compilara a pdf.

Pyploma es un script que, por supuesto, está escrito en python que coge un fichero LaTeX que contiene unos marcadores comentados y añade una serie de datos para cada entrada de una lista de datos. Aunque está originalmente pensado para generar diplomas, sustituyendo el dichero LaTeX podría servir para autorrellenar cualquier otro tipo de documento, incluso si está escrito en otro lenguaje.

Para que compile a pdf necesita tener instalado LaTeX y para unir los pdfs en un fichero depende de pdftk. No obstante estas funciones son opcionales y pueden comentarse en el script.

Hacerlo funcionar es tan sencillo como modificar en el script el nombre de la plantilla LaTeX y el de la lista de datos. Después escribir:

$ python pyploma.py

Y listo. Parece magia, pero no, es Python. Para ver el resultado, esta es la salida.

Si quieres descargar la plantilla LaTeX, la lista de datos y el script, sigue este enlace.

Plantilla LaTeX

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{mathpazo}
\renewcommand{\familydefault}{\rmdefault}
\usepackage[landscape,a4paper]{geometry}
\geometry{verbose,tmargin=0cm,bmargin=0cm,lmargin=0cm,rmargin=0cm}
\usepackage{fancybox}
\usepackage{calc}
\usepackage{multicol}
\usepackage{graphicx}

\begin{document}
~
\vspace{1cm}
\begin{center}

\huge{Un Bioinformatiquillo (http://bioinformatiquillo.wordpress.com)\\ certifica que}

\vspace{1cm}

\Huge{\textbf{%pointname

}}

\vspace{1cm}

\Large{con D.N.I. no.%pointdni

ha asistido y superado los estudios\\ con una califiaci\'on de %pointcalification

en el}

\vspace{1cm}

\Huge{\textbf{I CURSO DE REALIZACIÓN DE DIPLOMAS CON PYPLOMA}}

\vspace{1cm}

\Large{celebrado el 6 de julio de 2011 vitualmente en el blog, con una duraci\'on de un ratillo}

\vspace{.5cm}

\Large{Y para que as\'i conste se expide el siguiente certificado en el ciberespacio a \today.}

\vspace{.5cm}

\begin{multicols}{3}

\small Delegado de asusntos LaTeros\\
\vspace{3cm}
León Delátex Pérez
%\vspace{1cm} 

Director de Pythonismo\\
\vspace{3cm}
Ser Piente Grande
%\vspace{1cm} 

El/La Alumno/a\\
\vspace{3cm}
~~~~~~~~~~

\end{multicols}

\tiny El blog Un Bioinformatiquillo, con domicilio en el Vía Láctea s/n

\end{center}
\end{document}

Script en Python

Periquillo de los Palotes	00000001-A	NOTABLE
Rodolfo Chiquilicuatre	000000002-B	SOBRESALIENTE
Chavo del Ocho	00000003-C	APROBADO

Script en Python

# -*- coding: utf-8 -*-
# Este generador de diplomas lee una lista con nombre, dni y calificación para
# rellenarlos en una plantilla LaTeX con un marcador para cada campo.
# Opcionalemente compila los ficheros LaTeX generados y los une en uno solo.
# Si la plantilla LaTeX da error de compilación, pulsar intro varias veces.

print "Pyploma: Generador de diplomas en formatos LaTeX y pdf.\n"

# Invocar al terminal
from commands import *
import commands
def run_command(cmd):
    getstatusoutput(cmd)

# Cargar lista de nombres
lista = open("listadip", "r").readlines()

#contador
a = 100

for line in lista: # para cada persona...

    a += 1 #contador
    b = str(a) #pasa el contador a cadena
    salida = open("output" + b + ".tex","w") # crea fichero LaTeX para cada persona
    person = line[0:-1].split("\t") # pasar la cadena en lista

    text = open("certi.tex") # abrir documento LaTeX
    text = text.read() # leer documento LaTeX
    text_list = list(text) # pasa a lista

    y_cali = text.find("%pointcalification") # busca marcador de calificación
    z_cali = len("%pointcalification")+1
    text_list[y_cali+z_cali:y_cali+z_cali] = list(person[2]) # inserta calificación

    y_dni = text.find("%pointdni") # lo mismo para el dni
    z_dni = len("%pointdni")+1
    text_list[y_dni+z_dni:y_dni+z_dni] = list(person[1])

    y_name = text.find("%pointname") # lo mismo para el nombre
    z_name = len("%pointname")+1
    text_list[y_name+z_name:y_name+z_name] = list(person[0])

    text_final = "".join(text_list) # de lista a cadena

    salida.write(text_final) # guarda los cambio en el fichero creado
    salida.close() # cierra el fichero creado

    run_command(str("pdflatex " + "output" + b + ".tex")) # compila el fichero LaTeX a pdf (opcional)
    print person[0] #control

run_command(str("pdftk output*.pdf cat output todos_diplomas.pdf")) # crea pdf con todos los diplomas creados (opcional)

print "\n¡FINAL DE LA OPERACIÓN!" #control
About these ads

4 Respuestas a “Pyploma: Generador de diplomas en LaTeX a partir de una lista de datos”


  1. 2011/08/12 en 4:39 am

    gracias, mu util en la escuelas y a los encargados de los papeleos. Para la colección de scripts

  2. 3 krcabrer
    2012/07/16 en 5:10 am

    Excelente script. Muchas gracias por tu aporte, me fue muy útil. Una preguntica al margen: ¿Cómo le puedo añadir un borde al diploma? Muchas gracias.


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. 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 )

Conectando a %s


Contacto

Cuestiones, sugerencias, criticas,...

Manual LyX: Con “L” de LaTeX


Descarga el manual LyX

Ya van más de 8750 descargas.
¿A qué esperas? (Español, 1.1Mb)

Instala la nueva LyX 2.0.0 Final

Aprender LyX


Descarga el manual LyX

Ubuntu 12.10 LTS “Quantal Quetzal”

Firefox 4

Firefox 4

Ciencia Sin Tijeras

No al recorte en I+D

Feed RSS

Feed RSS



To translate / Traduire

Frases

Busco frases para realizar una colección sobre Linux, software libre e informática en general
julio 2011
L M X J V S D
« jun   ago »
 123
45678910
11121314151617
18192021222324
25262728293031

En twitter

Han pasado (+130000)

  • 888,374 bioinformatiquillos

Archivos

USE FIREFOX

No al soporte gratuito a Microsoft

No use Windows, los gatitos se la agradecerán

Creative Commons License

Esta obra está bajo una licencia de Creative Commons.


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 231 seguidores

%d bloggers like this: