# PDF To Artifacts David Antizar

> Pipeline de transformación de PDF a 3 artefactos — análisis técnico, post LinkedIn, infografía HTML + comparativa. Con marca Ntizar David Antizar, sistema Aurora, atribución correcta.

- Skill: `ntizar/pdf-to-artifacts-david-antizar` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add ntizar/pdf-to-artifacts-david-antizar`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ntizar/pdf-to-artifacts-david-antizar/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: ntizar (https://skillmd.com/u/ntizar)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ntizar/pdf-to-artifacts-david-antizar

---


# PDF → 3 Artifacts (Estilo David Antizar)

## Descripción

Pipeline completo que, dado un PDF de informe técnico (especialmente del sector energía/transporte/infraestructuras), genera **3 artefactos** con el branding y estilo de David Antizar:

1. **Artefacto HTML** — resumen interactivo con Aurora Design System (CDN), liquid glass, colores azul+naranja, tablas, KPIs, comparativas
2. **Post LinkedIn** — estilo David Antizar: datos duros, tono provocador-constructivo, estructura con secciones, emojis estratégicos, tesis clara
3. **Nota de auditoría** — en `notes/` con fecha, hallazgos cuantificados, crítica metodológica

## No es para

- **Extracción de datos estructurados (JSON/CSV)** de PDFs → usar `pdf-llm-extraction` (nuevo paradigma validado: font analysis + LLM, 100% confianza)
- OCR de documentos escaneados → usar `ocr-quirurgico-pdf-md`
- Conversión PDF → Markdown navegable → usar `ocr-quirurgico-pdf-md`

## Atribución

Siempre poner **David Antizar** como autor. **Mastermind** es el agente ejecutor, David es el autor visible.

**Footer HTML EXACTO:** `Hecho con (L) por David Antizar` — NUNCA "Análisis por David Antizar", NUNCA "· vía Mastermind Agent", NUNCA "vía Mastermind". Literal exacto.

En el post LinkedIn: redacción en primera persona como si David lo escribiera. En las notas: "Autor: David Antizar".

## Diseño Aurora

**Usar Aurora Design System.** No duplicar configuración aquí — cargar el skill `aurora-design-system` que es la fuente de verdad del branding visual.

Reglas que este pipeline hereda de `aurora-design-system`:
- CDN obligatorio (`ntizar.css` + `ntizar.next.css`)
- Skin `aurora` por defecto (azul + naranja + liquid glass)
- Footer con atribución: `Hecho con (L) por David Antizar`
- Sin CSS custom suelto

Para voz de LinkedIn de David Antizar, ver `references/linkedin-voice.md`.
Para presupuestos de construcción, ver `references/budget-dashboard-pattern.md`.

## Pipeline

### Paso 1: Extraer PDF
```bash
python3 -c "
import fitz
doc = fitz.open('ruta.pdf')
text = ''
for page in doc: text += page.get_text()
print(text)
"
```

### Paso 2: Analizar contenido
Identificar:
- Contexto (institución, fecha, autores)
- Datos clave (KPIs, tablas, cifras)
- Hallazgos principales (3-5)
- Metodología usada
- Recomendaciones/conclusiones
- Crítica metodológica

### Paso 3: Generar HTML (Aurora)
Usar Aurora CDN. Estructura:
- Hero con `nz-gradient-text` y glass effect
- Cards KPI con clases Aurora + colores semánticos
- Tablas con `.nz-table`
- Highlight boxes con colores semánticos
- Comparativas €/km/tiempo por tipo
- Footer: "Análisis por David Antizar | Mastermind Agent"

### Paso 4: Generar Post LinkedIn
Estructura del post:
1. **Hook inicial** — dato provocador o afirmación fuerte
2. **Secciones con emojis** (📉 ⏱️ 💰 🚗 🏡)
3. **Datos duros** intercalados con análisis
4. **Conclusión/tesis clara** al final
5. **Hashtags** (#MovilidadSostenible #Ferrocarril etc.)
6. SIN tablas markdown en LinkedIn (no renderizan)

### Paso 5: Nota de auditoría
- Archivo: `notes/YYYY-MM-DD-tema-auditoria.md`
- Contexto, Hallazgos, Crítica metodológica, Valoración general

## ⚠️ PITFALL: Extracción de texto de PDFs — Fallback chain

Cuando `pdftotext` (poppler-utils) no está disponible en el PATH, usar esta cadena de fallback:

### Paso 1: Verificar herramientas CLI disponibles
```bash
which pdftotext mutool pdfgrep  # Si ninguno responde → usar Python
```

### Paso 2: Usar `fitz` (PyMuPDF) vía Python
```bash
python3 -c "
import fitz
doc = fitz.open('ruta.pdf')
text = ''
for page in doc: text += page.get_text()
print(text[:10000])  # Limitar para no saturar
"
```

**Ventajas de fitz:**
- Extrae texto página por página (útil para PDFs grandes)
- No requiere instalación adicional (ya viene en el entorno)
- Funciona con PDFs generados por Acrobat PDFMaker (donde pdf.js falla)

### Paso 3: Guardar texto completo para parsing posterior
```bash
python3 -c "
import fitz
doc = fitz.open('ruta.pdf')
with open('/tmp/pdf_text.txt', 'w') as f:
    for page in doc: f.write(page.get_text())
"
```

### Herramientas Python disponibles (verificar con `pip list | grep -i pdf`)
- `fitz` (PyMuPDF) — **PRIMERA OPCIÓN**, más fiable
- `pdfplumber` — buena para tablas
- `PyPDF2` — fallback básico
- `pdfminer` — más lento pero preciso

### ⚠️ Limitaciones conocidas
- **PDFs generados por Acrobat PDFMaker:** pdf.js en navegador devuelve 0 palabras. Usar fitz siempre.
- **PDFs con imágenes solo (sin texto):** Necesitan OCR (tesseract, liteparse).
- **PDFs muy grandes (>300 páginas):** Extraer por secciones, no todo junto.

## Verificación final
- [ ] HTML carga correctamente con Aurora CDN
- [ ] Post LinkedIn tiene voz de David Antizar
- [ ] Nota guardada en `notes/`
- [ ] Atribución: "Análisis por David Antizar" siempre visible
- [ ] Aurora skin aurora activa (azul+naranja)

