Automatización 14 enero, 2026 11 min lectura

Conversión por Lotes de PDFs: Batch Processing [2026]

¿Tienes 500 PDFs para convertir a Word? ¿1,000 imágenes que escanear a PDF? Convertir uno por uno te llevaría horas. Esta guía te enseña a automatizar con scripts, herramientas de línea de comandos y flujos de trabajo que procesan cientos de archivos en minutos.

¿Para Quién Es Esta Guía?

Esta es una guía técnica avanzada para usuarios que necesitan procesar volúmenes masivos de PDFs. Requiere conocimientos básicos de:

  • • Terminal/Línea de comandos (CMD, PowerShell, Bash)
  • • Estructura de carpetas y rutas de archivos
  • • Instalación de software desde terminal
  • • (Opcional) Programación básica Python o JavaScript

Si prefieres interfaz gráfica, prueba Adobe Acrobat Pro (Herramientas > Asistente de acciones) o nuestro conversor online.

Herramientas Esenciales para Batch Processing

1. Ghostscript

Motor PDF y PostScript de código abierto

Qué hace: Interpreta, renderiza y convierte PDFs. Muchas otras herramientas lo usan por debajo (por ejemplo, ImageMagick para leer PDF).

Instalación:

Windows:

Descargar el instalador desde ghostscript.com

macOS:

brew install ghostscript

Linux:

sudo apt install ghostscript # Debian/Ubuntu

Usos: Comprimir PDFs, convertir PS/EPS a PDF, rasterizar a imágenes, combinar/dividir PDFs

2. ImageMagick

Procesador de imágenes universal

Qué hace: Convierte entre 200+ formatos de imagen, redimensiona, rota, añade marcas de agua. Soporta PDFs (usa Ghostscript internamente).

Instalación:

Windows:

winget install ImageMagick.ImageMagick

macOS:

brew install imagemagick

Usos: Imágenes → PDF, PDF → PNG/JPG, redimensionar lotes de imágenes, combinar páginas

3. PDFtk (PDF Toolkit)

Navaja suiza para PDFs

Qué hace: Combinar, dividir, rotar, encriptar, desencriptar, actualizar metadatos, extraer páginas.

Instalación:

Windows:

Descargar desde pdflabs.com/tools/pdftk-the-pdf-toolkit

Linux:

sudo apt install pdftk

Usos: Combinar 100 PDFs en 1, dividir PDF de 500 páginas en archivos individuales, rotar páginas en bloque

4. Python + PyPDF2 / pypdf

Programación avanzada de PDFs

Qué hace: Control total programático. Leer, escribir, combinar, extraer texto, añadir marcas de agua, formularios, encriptación.

Instalación:
pip install pypdf
pip install pdf2image Pillow # Para convertir a imágenes

Usos: Scripts personalizados, flujos de trabajo complejos, integración con bases de datos/APIs

Casos de Uso Comunes + Scripts Listos para Usar

1 Comprimir 500 PDFs Reduciéndolos a 150 DPI

Escenario: Tienes una carpeta con 500 PDFs escaneados a 300 DPI que ocupan demasiado. Necesitas reducirlos a 150 DPI para publicarlos en la web.

Script Bash/PowerShell:
# PowerShell (Windows)
$sourceFolder = "C:\Documents\PDFs_Originales"
$targetFolder = "C:\Documents\PDFs_Comprimidos"

Get-ChildItem $sourceFolder -Filter *.pdf | ForEach-Object {
    $inputFile = $_.FullName
    $outputFile = Join-Path $targetFolder $_.Name
    
    & "C:\Program Files\gs\gs10.02.1\bin\gswin64c.exe" `
        -sDEVICE=pdfwrite `
        -dCompatibilityLevel=1.4 `
        -dPDFSETTINGS=/ebook `
        -dNOPAUSE `
        -dQUIET `
        -dBATCH `
        -dColorImageResolution=150 `
        -dGrayImageResolution=150 `
        -sOutputFile=$outputFile `
        $inputFile
        
    Write-Host "Comprimido: $($_.Name)"
}

Write-Host "✅ Completado"
Resultado:
  • • Tamaño: los escaneos suelen bajar mucho al pasar de 300 a 150 DPI (cuánto, depende de cada documento)
  • • Tiempo: depende del número de páginas y de tu equipo; con lotes grandes, déjalo trabajando
  • • Calidad: Perfecta para visualización en pantalla, apta para impresión casera

2 Convertir 1,000 Imágenes JPG a PDFs Individuales

Escenario: Tienes 1,000 imágenes JPG (escaneos de facturas) y necesitas cada una como PDF individual para archivo contable.

Script Python:
# Python with Pillow
from PIL import Image
import os

input_folder = "C:/Facturas/JPG"
output_folder = "C:/Facturas/PDF"

for filename in os.listdir(input_folder):
    if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
        img_path = os.path.join(input_folder, filename)
        pdf_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}.pdf")
        
        # Abrir imagen y convertir a RGB (PDFs no soportan RGBA)
        image = Image.open(img_path)
        if image.mode == 'RGBA':
            image = image.convert('RGB')
        
        # Guardar como PDF
        image.save(pdf_path, "PDF", resolution=100.0, quality=85)
        
        print(f"✓ {filename} → {pdf_path}")

print("✅ Imágenes convertidas a PDF")
Optimización:

Para acelerar, usa multiprocessing. En una CPU con varios núcleos, procesar varias imágenes a la vez reduce bastante el tiempo total.

3 Combinar PDFs Agrupados por Carpeta

Escenario: 50 carpetas (clientes), cada una con 10-50 PDFs (facturas). Necesitas 1 PDF consolidado por cliente.

Script Bash (Linux/macOS):
#!/bin/bash

# Carpeta raíz con subcarpetas de clientes
ROOT_DIR="/home/user/Clientes"
OUTPUT_DIR="/home/user/Consolidados"

# Iterar cada subcarpeta (cliente)
for client_folder in "$ROOT_DIR"/*; do
    if [ -d "$client_folder" ]; then
        client_name=$(basename "$client_folder")
        output_pdf="$OUTPUT_DIR/$client_name-consolidado.pdf"
        
        # Combinar todos los PDFs de esa carpeta
        pdftk "$client_folder"/*.pdf cat output "$output_pdf"
        
        echo "✓ $client_name: consolidado $output_pdf"
    fi
done

echo "✅ Clientes consolidados"
Resultado:

De cientos de PDFs sueltos a un PDF consolidado por cliente, con un solo comando. Perfecto para archivo anual o envío a auditoría.

4 Convertir Lote de PDFs a DOCX (con OCR)

Escenario: 200 PDFs que necesitas editar en Word. Algunos son nativos, otros escaneados (requieren OCR).

Script Python + LibreOffice:
# Requiere: pip install ocrmypdf python-docx
import subprocess
import os

pdf_folder = "C:/PDFs"
docx_folder = "C:/DOCX"

for filename in os.listdir(pdf_folder):
    if filename.endswith('.pdf'):
        pdf_path = os.path.join(pdf_folder, filename)
        docx_name = filename.replace('.pdf', '.docx')
        docx_path = os.path.join(docx_folder, docx_name)
        
        # 1. Aplicar OCR si es necesario
        subprocess.run([
            'ocrmypdf',
            '--skip-text',  # Solo OCR si no tiene texto
            pdf_path,
            pdf_path + '_ocr.pdf'
        ])
        
        # 2. Convertir a DOCX con LibreOffice
        subprocess.run([
            'soffice',
            '--headless',
            '--infilter=writer_pdf_import',  # Abrir el PDF en Writer
            '--convert-to', 'docx',
            '--outdir', docx_folder,
            pdf_path + '_ocr.pdf'
        ])
        
        print(f"✓ {filename} → {docx_name}")

print("✅ PDFs convertidos a DOCX")
Notas:
  • • ocrmypdf: Añade capa de texto OCR a PDFs escaneados
  • • LibreOffice headless: Conversión PDF→DOCX sin abrir interfaz
  • • Tiempo: el OCR es lento; con muchos PDFs escaneados puede tardar horas (déjalo trabajando por la noche)

Técnicas Avanzadas de Optimización

Procesamiento Paralelo (Multicore)

Por defecto, scripts procesan archivos secuencialmente (1 por vez). En CPUs modernas (8+ núcleos), puedes procesar 8 archivos simultáneamente.

Ejemplo Python con multiprocessing:
from multiprocessing import Pool
import os

def compress_pdf(filename):
    # Tu función de compresión aquí
    os.system(f'gs -o compressed/{filename} -sDEVICE=pdfwrite ...')
    return filename

# Procesar 8 archivos en paralelo
with Pool(processes=8) as pool:
    files = [f for f in os.listdir('pdfs') if f.endswith('.pdf')]
    pool.map(compress_pdf, files)

# Puede ir varias veces más rápido (en la práctica, menos de 8x: disco y memoria también cuentan)

Barra de Progreso Visual

Para procesos largos (horas), añade barra de progreso para saber cuánto falta.

Con tqdm (Python):
from tqdm import tqdm

files = os.listdir('pdfs')
for filename in tqdm(files, desc="Comprimiendo PDFs"):
    compress_pdf(filename)

# Output: Comprimiendo PDFs: 42%|████████      | 210/500 [05:32<06:18, 0.77it/s]

Manejo de Errores Robusto

En lotes grandes, algunos archivos fallarán (corruptos, protegidos con contraseña). No detengas todo el proceso.

Pattern try/except + logging:
import logging

logging.basicConfig(filename='errors.log', level=logging.ERROR)
successful = []
failed = []

for filename in files:
    try:
        compress_pdf(filename)
        successful.append(filename)
    except Exception as e:
        failed.append(filename)
        logging.error(f"❌ {filename}: {str(e)}")

print(f"✅ Exitosos: {len(successful)}")
print(f"❌ Fallidos: {len(failed)} (ver errors.log)")

Workflow Empresarial Completo

Ejemplo de flujo para una empresa que recibe muchas facturas cada mes:

Pipeline Automatizado

1
Entrada (Watch Folder)

Script Python con watchdog monitorea carpeta compartida. Cuando llegan PDFs nuevos, dispara procesamiento automáticamente.

2
Validación

Verifica que sean PDFs válidos, no exceden 50 MB, no están protegidos con contraseña. Rechaza inválidos a carpeta /errores.

3
OCR (si necesario)

Detecta PDFs escaneados sin texto. Aplica Tesseract OCR en español.

4
Extracción de Datos

Regex + biblioteca pdfplumber extrae: NIF, importe total, fecha, concepto. Guarda en base de datos PostgreSQL.

5
Compresión + Archivo

Reduce a 150 DPI con Ghostscript. Renombra según patrón {año}/{mes}/{NIF}_{fecha}_{importe}.pdf. Mueve a NAS de archivo.

6
Notificación

Envía un informe diario por email con cuántas facturas se procesaron, cuántas salieron bien y cuáles fallaron (con el log adjunto).

Qué se Gana
  • • Antes: alguien dedica horas cada semana a renombrar, comprimir y archivar a mano
  • • Después: el proceso corre solo (por ejemplo, de noche) y las personas solo revisan los errores
  • • Resultado: menos trabajo repetitivo y menos errores al copiar datos

Problemas Comunes y Soluciones

Error Causa Solución
Memory Error PDFs muy grandes (>100 MB) llenan RAM Procesar en chunks. Usar -dBufferSpace=500000000 en Ghostscript
Permission denied Archivo abierto en otro programa Cerrar Adobe Reader. Añadir sleep(1) entre archivos
Texto corrupto post-OCR Imagen de baja calidad o idioma incorrecto Tesseract: especificar idioma -l spa. Mejorar DPI original a 300
Script muy lento Procesamiento secuencial Usar multiprocessing (8 cores = 8x speedup teórico)

¿Prefieres Procesar Online Sin Scripts?

Para tandas pequeñas no hace falta programar: Unir PDF y Convertir imágenes aceptan varios archivos a la vez y trabajan en tu navegador, sin subirlos a ningún servidor. Comprimir PDF también admite varios PDF, de hasta 16 MB cada uno (sin cuenta, 12 por hora; con una cuenta gratuita, sin límite). Todo gratis. Para cientos de archivos, los scripts de esta guía siguen siendo lo más práctico.

Probar el conversor online