﻿## Procesador de documentos PDF

El sistema recorre la carpeta `documentos/`, intenta extraer el texto de cada PDF utilizando varias estrategias (pdftotext, extractor nativo y OCR) y consolida todo dentro de `documentos_procesados.xlsx`.

### Requisitos

1. PHP 8.0 o superior con extensiones `zlib`, `zip` y `mbstring`.
2. **Opcional pero recomendado**
   - [`pdftotext`](https://poppler.freedesktop.org/) para aprovechar Poppler si el PDF contiene texto vectorial.
   - [`pdftoppm`](https://poppler.freedesktop.org/) o la extension `imagick` (con Ghostscript) para convertir paginas a imagenes antes del OCR.
   - [`tesseract`](https://github.com/tesseract-ocr/tesseract) para reconocer texto en PDFs escaneados.

Variables de entorno opcionales:

- `PDFTOTEXT_BIN` -> ruta al ejecutable `pdftotext` si no esta en el `PATH`.
- `PDFTOPPM_BIN` -> ruta a `pdftoppm` (se usa para el OCR).
- `TESSERACT_BIN` -> ruta al ejecutable `tesseract`.
- `OCR_LANG` -> idiomas para Tesseract (por defecto `spa+eng`).
- `OCR_DPI` -> resolucion de renderizado durante el OCR (por defecto `300`).

### Uso

```bash
php process.php
```

El script mostrara en la terminal que extractor logro extraer informacion y generara el archivo `documentos_procesados.xlsx` en la raiz del proyecto.

Cada fila del Excel incluye:

1. Nombre del archivo original.
2. Numero de linea (ordenada segun la extraccion).
3. Contenido textual.
4. Metodo de extraccion usado.

Si ningun metodo obtiene datos (por ejemplo, PDFs con imagenes de baja calidad), el Excel marcara la fila como `Sin texto legible (requerido OCR o mejor calidad)` para ese archivo.

### Flujo interno

1. **pdftotext** (si esta disponible): la forma mas precisa para PDFs con texto vectorial.
2. **Extractor nativo PHP**: descomprime streams `FlateDecode` y analiza operadores `Tj/TJ`.
3. **OCR**: renderiza cada pagina y ejecuta Tesseract (requiere `pdftoppm` o `imagick`).

Puedes instalar unicamente los componentes que necesites; el script salta automaticamente los pasos que no esten disponibles y lo detalla en la terminal.
