Usando la libreria FPDF y python vamos a crear un archivo pdf que contenga una tabla, este ejemplo sera util para generar listados y reportes mas adelante.
Ya hemos hablado anteriormente de la libreria FPDF en Python en Crear un PDF con la libreria FPDF y Python.
Donde explicamos como instalar fpdf y como hacer el uso basico.
Instalar la libreria estan facil como usar el comando pip.
pip install fpdfPara construir una tabla, el método principal que utilizaremos es cell(). Este método dibuja una celda rectangular con las siguientes propiedades:
- w / h: Ancho y alto de la celda.
- txt: El contenido textual.
- border: Define si se dibuja el borde (1 para sí, 0 para no).
- ln: Indica dónde se situará el cursor después de la celda (muy útil para saltos de línea).
- align: Alineación del texto (L, C, R).
pdf.cell(w = 10, h = 5, txt = 'ID', border = 1, align = 'C', fill = 0)Para este ejemplo vamos a usar un array de diccionarios para listar los datos, pero mas adelante podemos usar un archivo o una base de datos.
Codigo
A continuacion les dejo el codigo que use para el ejemplo, con comentarios en las secciones importantes.
from fpdf import FPDF
#arrray de diccionarios con los datos de las personas, cada diccionario representa una persona con su id, nombre completo, edad y email
personas = [
{'id': 1, 'nombre_completo': 'Juan Pérez', 'edad': 30, 'email': 'juan.perez@example.com'},
{'id': 2, 'nombre_completo': 'María López', 'edad': 25, 'email': 'maria.lopez@example.com'},
{'id': 3, 'nombre_completo': 'Carlos Ramírez', 'edad': 35, 'email': 'carlos.ramirez@example.com'},
{'id': 4, 'nombre_completo': 'Guadalupe Vera', 'edad': 35, 'email': 'guadalupe.vera@example.com'},
{'id': 5, 'nombre_completo': 'Hector Osmar', 'edad': 35, 'email': 'hector.osmar@example.com'},
{'id': 6, 'nombre_completo': 'Jose Perez', 'edad': 35, 'email': 'jose.perez@example.com'}
]
# creacion de la instancia de la clase FPDF, donde se le asigna la orientacion, unidad de medida y formato del papel
pdf = FPDF(orientation='P', unit='mm', format='A4')
pdf.add_page()
pdf.set_font('Arial', '', 20)
pdf.text(x = 10, y = 10, txt = 'Tabla de datos')
pdf.set_font('Arial', '', 12)
pdf.ln(10)
# aqui estamos creando el encabezado de la tabla, con el metodo cell, donde se le asigna un ancho, alto, texto, borde, alineacion y relleno
pdf.cell(w = 10, h = 5, txt = 'ID', border = 1, align = 'C', fill = 0)
pdf.cell(w = 50, h = 5, txt = 'Nombre Completo', border = 1, align = 'C', fill = 0)
pdf.cell(w = 40, h = 5, txt = 'Edad', border = 1, align = 'C', fill = 0)
pdf.cell(w = 60, h = 5, txt = 'Email', border = 1, align = 'C', fill = 0)
pdf.ln(5)
# en este ciclo for estamos recorriendo el array de diccionarios, y por cada persona estamos creando una fila en la tabla, con el metodo cell, donde se le asigna un ancho, alto, texto, borde, alineacion y relleno
for persona in personas:
pdf.cell(w = 10, h = 5, txt = str(persona['id']), border = 1, align = 'C', fill = 0)
pdf.cell(w = 50, h = 5, txt = persona['nombre_completo'], border = 1, align = 'C', fill = 0)
pdf.cell(w = 40, h = 5, txt = str(persona['edad']), border = 1, align = 'C', fill = 0)
pdf.cell(w = 60, h = 5, txt = persona['email'], border = 1, align = 'C', fill = 0)
pdf.ln(5)
# generamos la salida del pdf, con el metodo output, donde se le asigna el nombre del archivo a generar
pdf.output('tabla.pdf')
Y el resultado seria el siguiente.

Puntos Clave
- Consistencia de Anchos: Nota que los anchos (
w) del encabezado coinciden exactamente con los de las filas del ciclofor. Esto garantiza que la tabla se vea alineada y profesional. - Conversión de Tipos: Dado que el método
cellsolo acepta strings en el parámetrotxt, es vital usarstr()para los campos numéricos como el ID o la Edad. - Salto de Línea Controlado: El uso de
pdf.ln(8)después de cada fila asegura que el cursor baje la distancia exacta para comenzar la siguiente línea sin amontonar el texto.