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
Script Python con watchdog monitorea carpeta compartida. Cuando
llegan PDFs nuevos, dispara procesamiento automáticamente.
Verifica que sean PDFs válidos, no exceden 50 MB, no
están protegidos con contraseña. Rechaza inválidos a carpeta /errores.
Detecta PDFs escaneados sin texto. Aplica Tesseract OCR en español.
Regex + biblioteca pdfplumber extrae: NIF, importe total, fecha,
concepto. Guarda en base de datos PostgreSQL.
Reduce a 150 DPI con Ghostscript. Renombra según patrón
{año}/{mes}/{NIF}_{fecha}_{importe}.pdf. Mueve a
NAS de archivo.
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