---
name: pdf_add_table
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: impure
signature: "def pdf_add_table(doc, headers, rows, col_widths, header_style, row_style, border, row_height, alternate_bg) -> PDFDoc"
description: "Añade una tabla con fila de headers y filas de datos al documento PDF. Soporta anchos de columna personalizados, estilos diferenciados para headers/datos, bordes y colores alternados en filas."
tags: [pdf, table, data, builder, infra]
uses_functions: []
uses_types: [pdf_doc_py_infra, pdf_style_py_infra]
returns: [pdf_doc_py_infra]
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: doc
    desc: "PDFDoc con pagina activa"
  - name: headers
    desc: "lista de strings con nombres de columna de la tabla"
  - name: rows
    desc: "lista de listas de strings con los datos de cada fila"
  - name: col_widths
    desc: "lista de anchos de columna en mm; None distribuye uniformemente el ancho disponible"
  - name: header_style
    desc: "PDFStyle para la fila de headers; None usa Helvetica-Bold 10pt"
  - name: row_style
    desc: "PDFStyle para filas de datos; None usa Helvetica 10pt"
  - name: border
    desc: "tipo de borde: 0=sin borde, 1=borde completo"
  - name: row_height
    desc: "altura de cada celda en mm, por defecto 8"
  - name: alternate_bg
    desc: "si True alterna fondo gris claro en filas pares para mejorar legibilidad"
output: "PDFDoc con la tabla renderizada en la pagina activa"
tested: true
tests: ["tabla con headers y datos", "tabla con col_widths personalizados", "tabla sin borde"]
test_file_path: "python/functions/infra/pdf_add_table_test.py"
file_path: "python/functions/infra/pdf_add_table.py"
---

## Ejemplo

```python
headers = ["Dominio", "Funciones", "Purity"]
rows = [
    ["core", "45", "pure"],
    ["infra", "38", "impure"],
    ["finance", "22", "mixed"],
]
doc = pdf_add_table(doc, headers, rows, col_widths=[70, 40, 60])
```

## Notas

Las columnas se distribuyen uniformemente si `col_widths` es None. Si la lista tiene menos elementos que columnas, se completa con distribucion uniforme. El fondo alternado usa gris muy claro (245, 245, 245) en filas impares para mejorar la lectura de tablas largas. No gestiona overflow de celdas — textos muy largos se truncan en fpdf2 con `cell()`.
