feat: issue/0020 — generacion de PDFs en Python y Go
Añade 3 tipos Python (PDFDoc, PDFPage, PDFStyle) y 10 funciones Python para construir PDFs con fpdf2 (builder fluent), fusionar PDFs con pypdf y convertir HTML/Markdown a PDF via weasyprint (stub si no disponible). Añade pdf_simple_report en Go como stub hasta que go-pdf/fpdf se integre. - python/types/infra/: pdf_doc, pdf_page, pdf_style - python/functions/infra/: pdf_create, pdf_add_page, pdf_add_text, pdf_add_table, pdf_add_image, pdf_add_header_footer, pdf_from_html, pdf_from_markdown, pdf_merge, pdf_save - functions/infra/pdf_simple_report.go: stub Go con ReportSection/ReportTable - 17 tests Python pasando (pytest) - fpdf2 y pypdf añadidos via uv al venv Python Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
---
|
||||
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()`.
|
||||
Reference in New Issue
Block a user