Guía de construcción de PDFs con Python, utilizando la librería ReportLab y PLATYPUS

Uno de los procesos más comunes realizados en programación es la generación y posterior salida de información, ya sea en formato texto u otros formatos. En este tutorial nos centraremos en la generación de PDFs con Python.

En este breve tutorial vamos a aprender como generar ficheros en formato PDF con Python y para realizar esta tarea nos enfocaremos en el módulo de Python ReportLab, una herramienta  Open Source que pone a nuestra disposición gran variedad de opciones para realizar este proceso.

En los siguientes ejemplos utilizaremos clases y métodos haciendo uso de PLATYPUS (Page Layout and Typography Using Scripts), que nos permite maquetar y presentar información en pocas líneas de código y sin comernos la cabeza.  Forman parte del módulo de Python ReportLab que veremos a continuación.

Debemos saber que ReporLab necesita la librería PLATYPUS para funcionar, ya que es la encargada de configurar cada plantilla, marcos, cabeceras, párrafos, imágenes, gráficos, etc … Veamos a continuación de lo que es capaz de ofrecer PLATYPUS :

  • DocTemplates es la plantilla del documento que queremos crear.
  • PageTemplates es la plantilla para las diferentes páginas de nuestro documento.
  • Frames son las capas que contendrán parte de la información en nuestros documento.
  • Flowables son los elementos con los que maquetamos nuestro documento (párrafos, imágenes, gráficos, etc …).
  • Canvas, nos permite diseñar o pintar en nuestro documento.

Instalación de ReportLab

Antes de comenzar, vamos a realizar unas comprobaciones previas para comprobar si tenemos instalado ReportLab.

En nuestro caso no lo tenemos instalado, por lo que procedemos con su instalación a través del instalador de paquetes de Python Pip.

Debemos saber que que ReportLab sólo funciona correctamente en versiones 2.7+ y 3.6+ de Python, por lo que en otra versión no funcionará correctamente y es probable que se nos muestre el siguiente error durante su instalación:

Si aún así queremos continuar tenemos que editar el fichero _init_ y en la línea 6 reemplazar la versión por la que estemos utilizando.

Por último podemos consultar que está instalado correctamente

Creación de PDF

Para empezar vamos a utilizar la clase SimpleDocTemplate que es la que nos va a permitir construir nuestro documento PDF. Lo que hace SimpleDocTemplate es crear el objeto report, con la localización exacta del PDF que estamos creando. Por lo que una vez hemos hecho esto, nuestro objeto está listo para añadirle contenido.

A continuación vamos a asignarle un título, algo de texto, párrafos, imágenes y gráficos, pero para hacer esto necesitamos utilizar lo que ReportLab llama Flowables. Los Flowables son partes del documento (párrafos, tablas, imágenes, etc …) que ReportLab utiliza para organizar y completar la creación de ficheros PDF.

Cada Flowable (Paragraph, Spacer, Table, Image) es una clase y las utilizamos para construir elementos individuales dentro documento. A continuación debemos indicarle a ReportLab que estilo queremos usar para cada parte del documento, por lo que vamos a necesitar importar más componentes del módulo para realizar esta tarea.

También podemos optar por crear nuestro propio estilo, pero en este ejemplo vamos a utilizar el estilo que trae por defecto el módulo. En este caso el objeto styles contiene el estilo por defecto “sample” y vamos a utilizar código HTML para poder representarlo. Empezamos utilizando un encabezado h1.

Para que el PDF pueda ser generado, tenemos que utilizar el método build().

Nuestro script es muy básico y hasta ahora ha quedado así:

Incluyendo Tablas

Hasta ahora, tan sólo hemos creado un documento PDF con un título, por lo que nuestro siguiente paso es incluir algo más de contenido. Disponemos de diccionario que contiene una lista de la compra con descripción y cantidad de lo que necesitamos.

Vamos a crear una tabla con el contenido de la lista y para realizar esta tarea utilizaremos la clase Table para crear un objeto Table. Todos los datos incluidos en la lista los iremos incluyendo en un array de dos dimensiones. Veamos como realizar este proceso:

Este proceso que acabamos de realizar se llama una lista de listas y procedemos a incluirla al reporte. A continuación volvemos a generar el PDF llamando al método build(), indicando el título y la tabla que queremos incluir.

Parece funcionar pero visualmente se ve horrible, por lo que vamos a incluir alineaciones y algo de estilo para que sea más agradable a la vista. Empezaremos por alinear la tabla y crear un borde en sus celdas. Como siempre digo, es recomendable revisar la documentación para saber cómo realizar esta tarea:

Hasta ahora nuestro script es el siguiente:

Incluyendo Gráficas

Hasta ahora nuestro documento PDF, se compone de un título y una tabla, por lo que el siguiente paso es aprender a incluir algunas gráficas. Vamos a incluir un gráfico circular (en inglés llamado Pie Chart) y para poder hacerlo necesitamos hacer uso de la clase Drawing que se encarga de generar todo este tipo de gráficas.

Para incluir datos a nuestro gráfico circular necesitamos incluir dos listas por separado:

  • La primera lista contiene las etiquetas (labels)
  • La segunda lista es la que contendrá los datos (data).

El siguiente paso es crear el gráfico y agregar cada lista (etiquetas y datos).

Por último lo incluimos en el reporte a la hora de construir el PDF:

El script completo es el siguiente:

Y el resultado final sería algo parecido a esto:

Podemos consultar toda la documentación Oficial de ReportLab siguiendo este enlace. o descargar su guía oficial en formato PDF.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.