---
title: "Cómo unir archivos PDF en la línea de comandos de Linux (pdfunite)"
description: "Une archivos PDF en la línea de comandos de Linux con pdfunite de poppler-utils. Cubre la instalación, el uso, las alternativas (qpdf, Ghostscript) y la solución de problemas."
date: 2024-01-23
categories: ["linux"]
tags: ["pdf","command-line"]
---

import Button from "@components/widgets/Button.astro";
import Notice from "@components/widgets/Notice.astro";
import ListCheck from "@components/widgets/ListCheck.astro";
import Accordion from "@components/widgets/Accordion.astro";
import Tabs from "@components/widgets/Tabs.astro";
import Tab from "@components/widgets/Tab.astro";

Puedes unir archivos PDF en la línea de comandos de Linux en segundos usando `pdfunite` del paquete `poppler-utils`. Es la forma más rápida de combinar PDF cuando trabajas en un terminal, ejecutas scripts por lotes en un servidor sin entorno gráfico o automatizas pipelines de documentos. Esta guía cubre `pdfunite` en profundidad y luego muestra cuándo recurrir a alternativas como `qpdf` (conserva marcadores e hipervínculos) y `Ghostscript` (comprime la salida). Si trabajas con PDF desde el terminal con frecuencia, estos son [comandos esenciales de Linux](/es/comandos-linux/) que conviene tener en tu caja de herramientas.

## ¿Qué es poppler-utils?

Poppler-utils es un conjunto de utilidades de línea de comandos construidas sobre la biblioteca PDF poppler (un fork de xpdf). Viene con la mayoría de las distros de Linux e incluye seis herramientas:

<ListCheck>
<ul>
<li><strong>pdfinfo:</strong> muestra los metadatos del PDF (título, autor, número de páginas, estado de cifrado)</li>
<li><strong>pdftotext:</strong> <a href="/es/extraer-texto-pdf-linux/">convierte un archivo PDF a texto plano</a></li>
<li><strong>pdftohtml:</strong> convierte PDF a HTML</li>
<li><strong>pdfimages:</strong> extrae las imágenes incrustadas de un PDF</li>
<li><strong>pdfseparate:</strong> divide un PDF en archivos de una sola página</li>
<li><strong>pdfunite:</strong> une varios archivos PDF en uno solo</li>
</ul>
</ListCheck>

Este artículo se centra en `pdfunite` para unir PDF, y cubre las demás herramientas donde ayudan en un flujo de trabajo de unión (como `pdfinfo` para la verificación).

## Cómo instalar poppler-utils en Linux

Poppler-utils está en los repositorios oficiales de todas las distros principales. Instálalo con tu gestor de paquetes.

<Tabs>
<Tab name="Debian / Ubuntu">
```sh
sudo apt install poppler-utils
```
</Tab>
<Tab name="RHEL / Fedora">
```sh
sudo dnf install poppler-utils
```
</Tab>
<Tab name="Arch Linux">
```sh
sudo pacman -S poppler
```
</Tab>
<Tab name="openSUSE">
```sh
sudo zypper install poppler-tools
```
</Tab>
<Tab name="Alpine">
```sh
sudo apk add poppler-utils
```
</Tab>
<Tab name="macOS (Homebrew)">
```sh
brew install poppler
```
</Tab>
</Tabs>

<Notice type="info" title="Verificar la instalación">
Ejecuta `pdfunite --version` para confirmar que está instalado. En Ubuntu 24.04 LTS verás algo como:

```
pdfunite version 24.02.0
Copyright 2005-2024 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
```

Los números de versión varían según la distro. Ubuntu 24.04 trae `24.02.0`, Debian sid tiene `26.01.0`, y la última versión upstream es `26.07.0` (julio de 2026). Cualquiera de ellas funciona bien para unir PDF.
</Notice>

## Cómo unir archivos PDF con pdfunite

### Sintaxis básica

La sintaxis es simple: primero se listan los PDF de entrada y al final va el nombre del archivo de salida.

```sh
pdfunite file1.pdf file2.pdf file3.pdf output.pdf
```

Esto concatena `file1.pdf`, `file2.pdf` y `file3.pdf` en ese orden dentro de `output.pdf`.

<Notice type="warning" title="El archivo de salida se sobrescribe sin aviso">
pdfunite sobrescribe silenciosamente el archivo de salida si ya existe. No hay ningún aviso de confirmación. Revisa bien el nombre del archivo de salida antes de ejecutar el comando.
</Notice>

### Unir con comodines

Puedes usar la expansión de comodines del shell para unir todos los PDF de un directorio:

```sh
pdfunite *.pdf output.pdf
```

<Notice type="warning" title="La trampa del orden de los comodines">
El shell expande `*` alfabéticamente, no numéricamente. Si tus archivos se llaman `page_1.pdf`, `page_2.pdf`, ..., `page_10.pdf`, el orden será `page_1.pdf, page_10.pdf, page_2.pdf`. Eso está mal.

Solución: usa nombres de archivo con ceros a la izquierda (`page_01.pdf`, `page_02.pdf`, ..., `page_10.pdf`) o lista los archivos explícitamente.
</Notice>

### Unir desde una lista de archivos

Si tienes un archivo de texto con la lista de los PDF que quieres unir (un nombre de archivo por línea), ten en cuenta que `pdfunite` **no** admite leer desde stdin mediante un flag `-`. Usa sustitución de comandos en su lugar.

**Enfoque simple** (funciona si los nombres de archivo no tienen espacios):

```sh
pdfunite $(cat files.txt) output.pdf
```

**Enfoque más seguro** (maneja nombres de archivo con espacios):

```sh
mapfile -t files < files.txt
pdfunite "${files[@]}" output.pdf
```

El archivo `files.txt` debe contener una ruta de PDF por línea:

```
report-intro.pdf
report-chapter1.pdf
report-chapter2.pdf
report-appendix.pdf
```

### Verificar la unión

Después de unir, comprueba el número de páginas para confirmar que están todas:

```sh
pdfinfo output.pdf | grep "^Pages:"
```

Compáralo con la suma de los recuentos de páginas individuales:

```sh
pdfinfo file1.pdf | grep "^Pages:"
pdfinfo file2.pdf | grep "^Pages:"
pdfinfo output.pdf | grep "^Pages:"   # debería ser igual a la suma
```

Comprueba también que el archivo no está vacío:

```sh
ls -lh output.pdf
```

## Limitaciones de pdfunite (lo que debes saber)

pdfunite es rápido y simple, pero concatena los PDF a nivel de contenido de página. Esto significa:

- **Se pierden los hipervínculos.** Los enlaces internos del índice y las referencias cruzadas se rompen después de la unión.
- **Se eliminan los marcadores/esquemas.** Los esquemas del PDF (la navegación lateral en visores como Evince o Acrobat) desaparecen.
- **Sin soporte de cifrado.** No puedes unir PDF protegidos con contraseña directamente.
- **Sin manipulación de páginas.** No puedes rotar, reordenar ni extraer páginas concretas.
- **Sin compresión.** El archivo de salida puede ser más grande de lo esperado.

<Notice type="error" title="pdfunite elimina hipervínculos y marcadores">
Si tus PDF tienen una tabla de contenidos con enlaces clicables o esquemas/marcadores de PDF, no uses pdfunite. Usa [qpdf](#qpdf-conservar-hipervínculos-y-marcadores) en su lugar. Los conserva ambos.
</Notice>

Para uniones simples (combinar facturas, páginas escaneadas o informes sin enlaces internos), pdfunite es la herramienta adecuada. Si necesitas que los marcadores o hipervínculos sobrevivan, cambia a qpdf.

## Herramientas alternativas para unir PDF en Linux

Cuando pdfunite no es suficiente, estas tres herramientas cubren los huecos.

<Tabs>
<Tab name="qpdf">

### qpdf: conservar hipervínculos y marcadores

qpdf es la mejor alternativa cuando necesitas conservar la estructura del PDF. Maneja el cifrado, los rangos de páginas y mantiene intactos los marcadores e hipervínculos.

**Instalación:**

```sh
# Debian / Ubuntu
sudo apt install qpdf

# RHEL / Fedora
sudo dnf install qpdf

# Arch Linux
sudo pacman -S qpdf
```

**Unir PDF:**

```sh
qpdf --empty --pages file1.pdf file2.pdf file3.pdf -- output.pdf
```

**Unir rangos de páginas concretos:**

```sh
# Páginas 1-5 de file1, todas las páginas de file2
qpdf --empty --pages file1.pdf 1-5 file2.pdf 1-z -- output.pdf
```

**Descifrar y luego unir:**

```sh
qpdf --decrypt --password=SECRET encrypted.pdf decrypted.pdf
pdfunite decrypted.pdf other.pdf merged.pdf
```

</Tab>
<Tab name="Ghostscript">

### Ghostscript: unir y comprimir

Ghostscript es más pesado (~30 MB de instalación) pero hace algo que ninguna otra herramienta ligera hace: comprimir PDF durante o después de la unión. Útil para reducir el tamaño del archivo antes de subirlo o enviarlo por correo.

**Instalación:**

```sh
# Debian / Ubuntu
sudo apt install ghostscript

# RHEL / Fedora
sudo dnf install ghostscript

# Arch Linux
sudo pacman -S ghostscript
```

**Unir y comprimir en un solo paso:**

```sh
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite \
   -dPDFSETTINGS=/ebook \
   -sOutputFile=merged.pdf file1.pdf file2.pdf
```

**Comprimir un PDF existente:**

```sh
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
   -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH \
   -sOutputFile=compressed.pdf merged.pdf
```

**Niveles de calidad de PDFSETTINGS:**

| Ajuste | DPI | Caso de uso |
|---|---|---|
| `/screen` | 72 | Archivo más pequeño, solo lectura en pantalla |
| `/ebook` | 150 | Buen equilibrio entre tamaño y calidad |
| `/printer` | 300 | Alta calidad para imprimir |
| `/prepress` | 300 | Conserva el color, archivo más grande |

</Tab>
<Tab name="stapler">

### stapler: sustituto ligero de pdftk

pdftk se eliminó de los repositorios de Fedora en 2019 y es difícil de instalar en Ubuntu moderno por su dependencia de gcj. `stapler` es un sustituto basado en Python que hace operaciones a nivel de página.

**Instalación:**

```sh
# Con pip (cualquier distro)
pip install stapler

# Fedora
sudo dnf install pdf-stapler
```

**Unir PDF:**

```sh
stapler sel file1.pdf file2.pdf output.pdf
```

stapler también admite selección de páginas, división y otras operaciones al estilo de pdftk. Si necesitas una interfaz compatible con pdftk sin los quebraderos de cabeza de la instalación, stapler es la herramienta a usar.

</Tab>
</Tabs>

## Tabla comparativa de herramientas

| Característica | pdfunite | qpdf | Ghostscript | stapler |
|---|---|---|---|---|
| Unión simple | ✅ La mejor | ✅ Buena | ✅ Funciona | ✅ Buena |
| Conserva hipervínculos | ❌ | ✅ | ❌ | ✅ |
| Conserva marcadores | ❌ | ✅ | ❌ | ✅ |
| Maneja PDF cifrados | ❌ | ✅ La mejor | Limitada | Limitada |
| Comprime la salida | ❌ | Limitada | ✅ La mejor | ❌ |
| Operaciones por página | ❌ | ✅ | Limitada | ✅ La mejor |
| Velocidad | Muy rápida | Rápida | Más lenta | Rápida |
| Tamaño del paquete | menos de 1 MB | ~3 MB | ~30 MB | ~14 MB |
| En repos de distros modernas | ✅ | ✅ | ✅ | ❌ (pdftk eliminado) |

<Notice type="info" title="¿Qué herramienta debo usar?">
Empieza con **pdfunite** para uniones simples. Es la más rápida y ligera. Cambia a **qpdf** cuando importen los marcadores, los hipervínculos o los PDF cifrados. Usa **Ghostscript** cuando necesites comprimir la salida. Usa **stapler** cuando necesites manipulación de páginas al estilo pdftk.
</Notice>

## Flujos de trabajo reales y automatización

### Script de unión por lotes con validación

Este script valida que todos los archivos de entrada existan, los une e informa del número de páginas:

```sh
#!/bin/bash
set -euo pipefail

OUTPUT="${1:-merged.pdf}"
shift

# Valida que todas las entradas existan
for f in "$@"; do
    [[ -f "$f" ]] || { echo "ERROR: File not found: $f" >&2; exit 1; }
done

pdfunite "$@" "$OUTPUT"
echo "Created: $OUTPUT ($(pdfinfo "$OUTPUT" | grep "^Pages:" | awk '{print $2}') pages)"
```

Uso:

```sh
chmod +x merge-pdfs.sh
./merge-pdfs.sh combined-report.pdf chapter1.pdf chapter2.pdf chapter3.pdf
```

Para flujos de trabajo de automatización más avanzados, puedes integrar el procesamiento de PDF en herramientas como [n8n para pipelines de procesamiento de documentos](/es/automatizacion-n8n-autoalojado/).

### Manejar PDF cifrados

pdfunite no puede procesar PDF protegidos con contraseña. Descífralos primero con qpdf:

```sh
# Descifrar
qpdf --decrypt --password=THEPASS protected.pdf unprotected.pdf

# Luego une como siempre
pdfunite unprotected.pdf other.pdf merged.pdf

# Elimina el archivo descifrado
rm unprotected.pdf
```

### Verificar la unión

Verifica siempre después de unir, sobre todo en scripts:

```sh
# Comprueba que el total de páginas coincida con la suma de las entradas
EXPECTED=$(pdfinfo file1.pdf | grep "^Pages:" | awk '{sum += $2} END {print sum}')
EXPECTED=$((EXPECTED + $(pdfinfo file2.pdf | grep "^Pages:" | awk '{print $2}')))
ACTUAL=$(pdfinfo output.pdf | grep "^Pages:" | awk '{print $2}')

if [[ "$EXPECTED" -eq "$ACTUAL" ]]; then
    echo "OK: $ACTUAL pages"
else
    echo "MISMATCH: expected $EXPECTED, got $ACTUAL" >&2
    exit 1
fi
```

### Mantener poppler-utils actualizado (seguridad)

<Notice type="warning" title="Mantén poppler-utils actualizado">
Poppler procesa archivos PDF arbitrarios y ha tenido múltiples CVE (CVE-2026-10118, CVE-2025-52885, CVE-2025-43718 y otros). Si unes PDF de fuentes no confiables, mantén el paquete actualizado y considera [ejecutar herramientas CLI en entornos aislados](/es/docker-podman-entorno-seguro-ia/).

```sh
# Debian / Ubuntu
sudo apt update && sudo apt upgrade poppler-utils

# RHEL / Fedora
sudo dnf upgrade poppler-utils
```
</Notice>

<Button text="Automatiza flujos de documentos con n8n" link="/es/automatizacion-n8n-autoalojado/" variant="outline" color="blue" />

## Solución de errores comunes

<Accordion label="Permiso denegado" group="troubleshooting">

No tienes permiso de lectura o escritura sobre los archivos PDF.

```sh
# Comprueba los permisos
ls -l file.pdf

# Solución: da al propietario lectura+escritura
chmod u+rw file.pdf
```

Si los archivos pertenecen a otro usuario, puede que necesites `sudo` o cambiar el propietario con `chown`.

</Accordion>

<Accordion label="Archivo no encontrado" group="troubleshooting">

El archivo no existe o el nombre está mal escrito.

```sh
# Comprueba tu directorio de trabajo
pwd

# Lista los PDF del directorio actual
ls *.pdf

# Usa el autocompletado con tabulador para evitar erratas
pdfunite file1<TAB>
```

Si ejecutas el comando dentro de un script, usa rutas absolutas o verifica primero el directorio de trabajo.

</Accordion>

<Accordion label="Archivo PDF no válido o dañado" group="troubleshooting">

El PDF está corrupto. A diferencia de lo que afirman algunas guías, `pdfinfo` **no** tiene un flag `-repair`. Usa una de estas herramientas para intentar la reparación:

**Con qpdf** (reconstruye la estructura del PDF):

```sh
qpdf --check damaged.pdf
qpdf --qdf damaged.pdf repaired.pdf
```

**Con Ghostscript** (reescribe el PDF completo):

```sh
gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress damaged.pdf
```

**Con pdftk** (si está instalado):

```sh
pdftk damaged.pdf output repaired.pdf
```

Si ninguna funciona, el archivo probablemente no tenga reparación. Compara los tamaños de archivo con la guía de [comparación de carpetas en la línea de comandos](/es/comparar-carpetas-diferencias-contenido/) si tienes una copia de seguridad con la que cotejarlo.

</Accordion>

<Accordion label="Comando no encontrado: pdfunite" group="troubleshooting">

poppler-utils no está instalado. Verifícalo:

```sh
which pdfunite
# Sin salida = no instalado
```

Vuelve a la [sección de instalación](#cómo-instalar-poppler-utils-en-linux) e instálalo para tu distro.

</Accordion>

<Accordion label="Problemas de memoria con PDF grandes" group="troubleshooting">

pdfunite carga los PDF completos en memoria. Si unes archivos de cientos de MB cada uno, puedes sufrir presión de memoria. Comprueba los recursos de tu sistema:

```sh
# Comprueba la memoria disponible
free -h

# Monitoriza el uso de swap
swapon --show
```

Para archivos muy grandes, considera Ghostscript, que usa un enfoque de streaming:

```sh
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite \
   -dPDFSETTINGS=/prepress \
   -sOutputFile=merged.pdf large1.pdf large2.pdf
```

Si necesitas [monitorizar los recursos del sistema Linux](/es/uso-swap-linux/) durante operaciones por lotes, configura alertas para detectar a tiempo las condiciones de OOM.

</Accordion>

## Conclusión

Para unir archivos PDF en la línea de comandos de Linux, la herramienta que elijas depende de lo que necesites:

- **pdfunite:** opción por defecto para uniones simples. Rápida, diminuta, ya instalada en la mayoría de los sistemas.
- **qpdf:** úsala cuando haya marcadores, hipervínculos o PDF cifrados de por medio.
- **Ghostscript:** úsala cuando necesites comprimir la salida o unir archivos muy grandes.
- **stapler:** úsala cuando necesites manipulación de páginas al estilo pdftk.

Las herramientas hermanas de poppler son útiles en un flujo de trabajo de unión: `pdfinfo` para comprobar el número de páginas y el estado del cifrado antes de unir, `pdfseparate` para dividir un PDF (la operación inversa) y `pdftotext` para extraer texto para la verificación.

Si administras un VPS o un servidor sin entorno gráfico y procesas PDF con regularidad, mantén poppler-utils actualizado y considera [securizar tu servidor Linux](/es/securizar-servidor-ssh-linux/) si maneja archivos de fuentes externas.

<Button text="Explora más comandos de Linux" link="/es/comandos-linux/" variant="outline" color="blue" />

## Preguntas frecuentes

<Accordion label="¿Puede pdfunite unir PDF protegidos con contraseña?" group="faq">
No. pdfunite no puede procesar PDF cifrados. Descífralos primero con qpdf:

```sh
qpdf --decrypt --password=THEPASS protected.pdf unprotected.pdf
pdfunite unprotected.pdf other.pdf merged.pdf
```
</Accordion>

<Accordion label="¿Conserva pdfunite los marcadores e hipervínculos?" group="faq">
No. pdfunite concatena el contenido de las páginas a bajo nivel, lo que elimina los marcadores (esquemas) y rompe los hipervínculos internos. Si necesitas conservarlos, usa qpdf en su lugar:

```sh
qpdf --empty --pages file1.pdf file2.pdf -- output.pdf
```
</Accordion>

<Accordion label="¿Cuál es la diferencia entre pdfunite y qpdf?" group="faq">
pdfunite es más simple y ligero (menos de 1 MB, el más rápido). Es genial para uniones básicas en las que no te importan los marcadores ni los hipervínculos. qpdf es más pesado (~3 MB) pero conserva la estructura del PDF, maneja archivos cifrados, admite rangos de páginas y puede descifrar PDF. Para la mayoría, lo mejor es empezar con pdfunite y cambiar a qpdf cuando te topes con una limitación.
</Accordion>

<Accordion label="¿Cómo uno PDF en un orden específico?" group="faq">
Lista los archivos explícitamente en el orden que quieras:

```sh
pdfunite intro.pdf chapter1.pdf chapter2.pdf appendix.pdf output.pdf
```

Si usas comodines, la expansión del shell es alfabética: `page_1.pdf` va antes que `page_10.pdf`, no que `page_2.pdf`. Usa nombres con ceros a la izquierda (`page_01.pdf`, `page_02.pdf`, ..., `page_10.pdf`) para obtener el orden numérico correcto.
</Accordion>