# AgilizaPDF (Laravel + Inertia React + Tailwind)

AgilizaPDF es una app web full stack para convertir documentos y datos de forma moderna, responsiva y automatizada.

## Conversiones soportadas

- Word → PDF
- PDF → Word (aproximado)
- PDF → LaTeX (best-effort: texto)
- LaTeX → PDF
- Word → LaTeX
- LaTeX → Word
- Excel → CSV
- CSV → Excel
- CSV → JSON
- JSON → CSV
- Excel → JSON
- JSON → Excel
- Unir PDFs
- Separar PDF en páginas (ZIP)
- Eliminar páginas de PDF
- Extraer texto de PDF (TXT/DOCX)

## OCR (PDFs escaneados)

Para PDFs escaneados (sin texto seleccionable), AgilizaPDF puede aplicar OCR automáticamente antes de convertir.

- Requiere: `ocrmypdf`, `tesseract`, `ghostscript (gs)`, `qpdf`
- Variables: `OCR_ENABLED=true`, `OCR_LANG=spa+eng`, `OCR_TIMEOUT=600`

## Extractor de texto PDF

Para extraer texto (TXT o DOCX) se usa un extractor Python incluido en `extractor/`.

- Dependencias Python: `pip install -r extractor/requirements.txt`
- Variables: `PYTHON_BIN=python`, `EXTRACT_TIMEOUT=900`, `EXTRACT_IDLE_TIMEOUT=0`, `EXTRACT_MAX_PAGES=0`, `EXTRACT_MAX_MB=0`, `EXTRACT_MAX_SECONDS=0`
- Idiomas OCR: `spa`, `eng`, `spa+eng`

## Arquitectura

- Frontend: Inertia + React + Tailwind.
- Backend: Laravel (upload, validación, rutas firmadas).
- Procesamiento: Jobs en cola (`RunConversionJob`) + convertidores por tipo.
- Storage: `storage/app/private/inputs` y `storage/app/private/outputs` (no público).
- Docker: incluye LibreOffice, Pandoc, TeX Live/latexmk, Poppler, Python + pdf2docx y OCR.

## Desarrollo (Docker)

```bash
docker compose up --build
```

- App: `http://localhost:8080`
- Vite (HMR): `http://localhost:5173`

## Privacidad (por sesión)

- El historial y el detalle de conversiones se muestran sólo dentro de la misma sesión del navegador.
- Las descargas usan enlace firmado (temporal).

## Limpieza automática (recomendado)

Para evitar retención innecesaria de archivos y mejorar disponibilidad (disco), programa un cron:

```bash
php artisan conversions:prune --days=1
```

## Diagnóstico (servidor / producción)

Para verificar permisos, límites PHP y binarios disponibles:

```bash
php artisan agilizapdf:doctor
```

## Tests

```bash
docker compose exec -T app php artisan test
docker compose exec -T app php artisan test --group=integration
# Extraer texto (tests de integracion) con Python/Tesseract.
RUN_EXTRACTOR_TESTS=1 docker compose exec -T app php artisan test --group=integration --filter=ExtractTextIntegrationTest
```

## E2E (Playwright)

Instala navegador para pruebas:

```bash
npx playwright install chromium
```

Ejecutar tests:

```bash
npm run test:e2e
```

Generar snapshots base (primera vez o cambios de UI):

```bash
npm run test:e2e:update
```
## Producción (cPanel)

Recomendación: en cPanel configura el *document root* apuntando a `public/`.

Consideraciones importantes:

- Las conversiones pesadas requieren binarios (LibreOffice/Pandoc/TeX Live/Poppler/Python/OCR). En hosting compartido normalmente no están disponibles: para 100% funcionalidad se recomienda VPS o un worker separado.
- Configura `.env` con `APP_ENV=production`, `APP_DEBUG=false`, `APP_KEY`, etc.
- Para cola en background, configura un worker (`queue:work`) o usa `QUEUE_CONNECTION=sync` (menos escalable).



