Creación de archivos PDF con Python y Reportlab
¿Que es Reportlab?
ReportLab es el motor de código abierto, ultra robusto y de gran duración para crear documentos PDF complejos y basados en datos y gráficos vectoriales personalizados. Es gratis, de código abierto y escrito en Python.
Para realizar los ejemplos de hoy es necesario descargar la librería reportlab, la cual puedes adquirir ingresando en el siguiente enlace: Descargar Reportlab.
Creando nuestro primer PDF
Hace unos días, estaba realizando un programa que hacia peticiones a distintos servidores web y se me ocurrió ingresas los datos devueltos por el servidor en una tabla dentro de un archivo con formato PDF.
La cuestión era que nuca había hecho un archivo tan complejo con Python, salia a caminar un rato tratando de pensar en como lograr ese objetivo, no me quedo más remedia que acudir a mi amigo que lo sabe todo, "Google". Luego de investigar por unos cuantos minutos me tope frente a frente con "Reportlab", entre a su sitio oficial (http://www.reportlab.com/) y todo lo que se podía lograr con este sofware.
Luego de investigar a fondo a Reportlab, conseguí mi objetivo.
No es la gran cosa, pero es un comienzo. Como pueden ver e plasmado la respuesta de los servidores en una tabla.
Si quieres ver le código el cual da como resultado la creación del archivo que te mostré previamente, ingresa al siguiente enlace: Código Completo.
Ahora haremos unos ejemplos para entender un poco como funciona Reportlab
Mi Hola Mundo en Reportlab
Muy bien, haremos un pequeño script que genere un archivo PDF con una cadena de texto la cual sera "Hola Reportlab", ya que es inadecuado conocer a alguien sin saludarlo, veamos como se hace.
#Importamos los modulos necesarios from reportlab.pdfgen import canvas doc = canvas.Canvas("Hola Mundo.pdf") #Escribimos una cadena de Texto dentro del documento doc.drawString(100, 750, "Hola Mundo!!!") #Guardamos el documento doc.save() Veamos que hace el código presentado anteriormente, antes de continuar quiero mencionar que puedes ver y descargar el codigo ingresando al siguiente enlace: Codigo de Hola Reportlab. En el script, lo primero que hacemos es importar los métodos de canvas que se encuentran dentro de reportlab.pdfgen. Luego de esto hacemos una instancia de Canvas, y le pasamos como argumento el nombre de nuestro archivo, en este caso yo le e colocado "Hola Reportlab.pdf". Ahora que doc es la instancia de Canvas podemos empezar a usar sus métodos, el método que nos permite escribir cadenas de textos dentro de nuestros documentos PDF, se llama "drawString", a este método le e pasado 3 argumentos, los cuales son, su posición en el eje X, el segundo es su posición en el eje Y y el tercero es la cadena que deseamos escribir en el documento. Luego de esto usamos el método "save" para guardar nuestro documento. Como pueden ver es algo muy fácil, si abrimos nuestro documento, el resultado debería ser el siguiente:
Si quisiéramos hasta podríamos cambiar la fuente de texto si quisiéramos, esto lo logramos usando el método "setFont" como se muestra a continuación:
doc.setFont("Helvetica", 15)
Trabajando con Figuras y Formas.
Llego la hora de trabajar con figuras, ahora, dibujemos un poco.
Con el método "circle", podemos hacer la forma de un circulo, debemos pasar como argumento su posición en el eje X e Y y el tamaño del circulo, veamos un ejemplo:
doc.circle(300, 700, 100) #Creación del circulo El resultado debería ser el siguiente:
Si quisiéramos una linea recta, tendríamos que usar el método "line" de la siguiente manera:
doc.line(20,700,580,700) #Creación de una linea recta El resultado debería ser el siguiente:
Si no les basta un circulo y una linea, pueden usar otros metodos como ellipse, grid, roundRect, wedger, entre otros.
Una imagen vale más que mil palabras.
¿Que pasa si quiero ingresar una imagen dentro del documento?, muy facil, ¿Como lo se hace?, así:
#Importamos los modulos necesarios from reportlab.pdfgen import canvas doc = canvas.Canvas("Hola Mundo.pdf") #Inseratmos la imagen en el documento doc.drawImage("https://udemy-images.udemy.com/course/750x422/433798_1de9_4.jpg", -50, 500) #Guardamos el documento doc.save() Para insertar una imagen en el documento se hace uso del método drawImage, al cual le pasamos 3 argumentos, el primero es la ruta de la imagen, en este caso uso una imagen de Internet, los últimos 2 argumentos son la posición de la imagen. El resultado debería quedarnos así:
Hay algunas cosas que debo aclarar, lo primero es que el método drawImage, solo acepta imágenes con formato "jpg", lo segundo es que la posición de la imagen va a depender de su tamaño.
Bueno, dejaremos esto hasta aquí, este modulo es extenso así que tratare de traer más artículos referentes a Reportlab, cualquier duda con gusto las responderé. Mi nombre es Luis, y fue un placer compartir mis conocimientos con ustedes :D.
-
Genial, muy útil, pero pásale el corrector:
puedes adquirir ingresando....podéis adquirir ingresando
se me ocurrió ingresas...se me ocurrió ingresar
nuca...nunca
no me quedo más remedia...no me quedó más remedio
ver e plasmado...ver he plasmado
etc -
Debo admitir que los informáticos tenemos una pésima redaccion y por lo tanto darnos a entender también es complicado. Es cosa de mirar unos tutoriales que aparecen en youtube. Para explicar una cosa puntual y precisa comienzan con unas charlas aburridisimas, la diccion es pésima, y empiezan con la instalacion de PYTHON y despues las librerias. Una mediocridad a toda prueba
-
Ah, ANONIMO,..el "podéis" es propio de ustedes los coños. Y toda esa cultura que presumes ustedes se la deben al grandioso pueblo árabe que los mantuvo cautivos varios siglos.
gabielaraya2011@gmail.com -
Saludo cordial, Realice un script python para hacer PDF con Reporlab, y al tratar de hacerle el ejecutable no me funciona, al igual que el modulo tkCalendar, averiguando encontré que existe unas condiciones especiales a configurar en la importaciones de estos modulos que son de segundo nivel,, me podrian informar cual es la importacion para reportlab para poder hacerle el ejecutable.. muchas gracias
Deja una respuesta
Buenas Luis. Me gustó su artículo.
Yo soy principiante en Python. Ahora estoy en un gran dilema, cómo hacer reportes en Python. Estoy acostumbrado a Oracle, Visual Fox, he incluso he visto un poco de Cristal Report.
Mi pregunta es, cómo hago para hacer reportes por corte de control, como decir por departamento. Agrupaciones de datos o sea los group by. Report Lab, tiene una interfaz gráfica, donde pueda manipular todo esto. Igual hacer sumatorios por corte de control o reportes planos. Me gusta mucho python. De hecho debo comenzar un proyecto y es bstante grande y muy importante para mi. Lo voy a realizar en python, pero tengo el gran dilema de la impresión.
Necesito tus consejos o la forma de cómo poderme en contacto con usted.
Roberto
Costa Rica
rmatarria@gmail.com