---
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, pendiente-usar]
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.
