--- name: compress_pdf_ghostscript kind: function lang: py domain: infra version: "1.0.0" purity: impure signature: "compress_pdf_ghostscript(pdf_path: str | Path, quality: str = 'screen') -> bool" description: "Comprime un PDF en disco usando Ghostscript con downsampling 96/200 dpi. Reemplaza el archivo solo si el comprimido es menor. Retorna True si comprimió, False si gs no disponible o no hubo mejora." tags: [pdf, ghostscript, compression, infra] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [shutil, subprocess, tempfile, pathlib] params: - name: pdf_path desc: "Ruta al archivo PDF a comprimir. Se modifica en sitio si la compresión mejora el tamaño." - name: quality desc: "Perfil PDFSETTINGS de Ghostscript: screen (96 dpi), ebook, printer, prepress." output: "True si el archivo fue reemplazado por la versión comprimida, False si gs no está disponible, el archivo no existe, falló o el resultado no era menor." tested: true tests: - "crea pdf temporal y comprime - retorna bool sin excepcion" - "retorna False cuando gs no esta disponible" test_file_path: "python/functions/infra/tests/test_compress_pdf_ghostscript.py" file_path: "python/functions/infra/compress_pdf_ghostscript.py" source_repo: "internal:footprint_aurgi" source_license: "internal-aurgi" source_file: "ponderacion_isochronas/src/recomendador_centros.py" --- ## Ejemplo ```python compressed = compress_pdf_ghostscript("report.pdf", quality="ebook") if compressed: print("PDF comprimido correctamente") ``` ## Notas Requiere `gs` (Ghostscript) en el PATH. Si no está disponible retorna False sin lanzar excepción. El perfil `screen` produce la mayor compresión (96 dpi), útil para distribución web. El reemplazo es atómico: el original no se toca si la compresión falla o no mejora el tamaño.