Extraer texto de un PDF desde la línea de comandos de Linux (pdftotext)
Extrae texto de archivos PDF en la línea de comandos de Linux con pdftotext. Cubre la instalación, los modos de diseño, los PDFs protegidos con contraseña, OCR para documentos escaneados y scripts por lotes.
Actualizado Publicado 22 min de lectura

Extraer texto de archivos PDF desde la línea de comandos de Linux es sencillo con pdftotext, parte del paquete poppler-utils. Convierte documentos PDF a texto plano. Sin GUI, sin servicios en la nube, sin cuentas. Instala el paquete, apúntalo a un archivo y obtén texto al otro lado.
Esta guía cubre la instalación, el uso básico, cada opción útil, el manejo de PDFs protegidos con contraseña y escaneados, alternativas cuando pdftotext no es suficiente, scripts por lotes y solución de problemas.
- Instala poppler-utils en cualquier distro Linux importante
- Extrae texto de PDFs con pdftotext (básico y avanzado)
- Maneja PDFs protegidos con contraseña y escaneados/basados en imágenes
- Usa scripts por lotes para procesar varios PDFs a la vez
- Soluciona los fallos de extracción más comunes
¿Qué es poppler-utils?
Poppler-utils es una colección de utilidades de línea de comandos para manipular archivos PDF. Está basada en la biblioteca poppler, un fork de la biblioteca xpdf. La estrella del paquete es pdftotext, que convierte archivos PDF a texto plano con diseño, codificación y selección de páginas configurables.
Otras herramientas del paquete se encargan de tareas de PDF distintas:
Herramientas clave de poppler-utils de un vistazo
| Herramienta | Propósito |
|---|---|
| pdftotext | Convierte PDF a texto plano (el foco de este artículo) |
| pdfinfo | Muestra metadatos del PDF: título, autor, número de páginas, etc. |
| pdftohtml | Convierte PDF a HTML |
| pdfimages | Extrae imágenes de un PDF |
| pdfseparate | Divide un PDF en archivos de una sola página |
| pdfunite | Fusiona archivos PDF con pdfunite en uno solo |
Si trabajas con PDFs desde la terminal con regularidad, poppler-utils es de esos paquetes que instalas una vez en cada servidor. Combina bien con otros comandos esenciales de Linux que usas a diario.
Cómo instalar poppler-utils en Linux
Poppler-utils está en los repositorios oficiales de todas las distribuciones Linux importantes. Elige tu distro abajo.
Ubuntu / Debian / Mint
sudo apt install poppler-utilsFedora / RHEL 8+ / CentOS Stream
sudo dnf install poppler-utilsArch Linux / Manjaro
sudo pacman -S popplerAlpine Linux
sudo apk add poppler-utilsopenSUSE
sudo zypper install poppler-toolsRHEL/CentOS 7 heredado
Si todavía estás en RHEL/CentOS 7, usa sudo yum install poppler-utils. En cualquier cosa más nueva (RHEL 8+, Fedora, AlmaLinux, Rocky Linux), usa dnf.
Verificar la instalación
Ejecuta:
pdftotext --versionSalida esperada (la versión variará según la distro):
pdftotext version 24.02.0
Copyright 2005-2024 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLCSi obtienes command not found, el paquete no está instalado o no está en tu PATH. Vuelve a ejecutar el comando de instalación de tu distro.
Comprueba tu versión para las funciones más nuevas
Algunas opciones requieren versiones mínimas de poppler:
-tsvnecesita poppler ≥ 22.05.0 (Ubuntu 22.10+, Fedora 37+, Arch rolling)-remove-hyphensnecesita poppler >= 26.05.0 (mayo de 2026). Solo en distros rolling o compilaciones manuales, NO en Ubuntu 24.04 (incluye 24.02.0).
Compruébalo con pdftotext --version antes de confiar en estas funciones.
Cómo usar pdftotext: extracción básica de texto
Sintaxis básica y primera extracción
La invocación más simple toma un PDF de entrada y produce un archivo de texto:
pdftotext input.pdf output.txtSi omites el nombre del archivo de salida, pdftotext usa el mismo nombre con extensión .txt:
pdftotext input.pdf
# Crea input.txt en el directorio actualVerifica que funcionó:
wc -l output.txtSi el recuento de líneas es cero o casi cero, el PDF probablemente es escaneado/basado en imágenes. Consulta la sección de OCR más abajo.
Lectura desde stdin y escritura a stdout
Puedes canalizar datos PDF de entrada y texto de salida usando - como nombre de archivo:
cat input.pdf | pdftotext - -Esto es útil en scripts y pipelines donde no quieres archivos intermedios:
pdftotext report.pdf - | grep -i "quarterly revenue"Personalizar el formato de salida con las opciones de pdftotext
pdftotext tiene muchas opciones para controlar cómo sale el texto. Se agrupan en varias categorías.
Control de diseño: -layout, -raw, -fixed
-
-layout: Conserva el diseño original del PDF, incluidas columnas, tablas y espaciado. Es mi opción por defecto para documentos de varias columnas.bash pdftotext -layout input.pdf output.txt -
-raw: Mantiene el orden original del texto pero ignora el posicionamiento del diseño. Útil cuando-layoutdesordena el texto por fuentes inusuales.bash pdftotext -raw input.pdf output.txt -
-fixed number: Asume texto de paso fijo (monoespaciado) con el ancho de carácter dado en puntos. Útil para PDFs generados a partir de texto de ancho fijo.bash pdftotext -fixed 8 input.pdf output.txt -
-colspacing number: Controla el umbral de detección de columnas (por defecto: 0.7). Valores más bajos (p. ej., 0.3) detectan separaciones de columna más estrechas; valores más altos (p. ej., 1.5) son más permisivos. Ajústalo cuando las columnas se fusionen o se dividan incorrectamente.bash pdftotext -layout -colspacing 0.3 input.pdf output.txt
Selección de páginas: -f y -l
Extrae un rango de páginas específico:
# Extraer solo las páginas 5 a 12
pdftotext -f 5 -l 12 input.pdf output.txt-f number: Primera página a extraer (empieza en 1).-l number: Última página a extraer.
Combínalas con otras opciones:
pdftotext -f 1 -l 5 -upw "mypass" -layout report.pdf pages1-5.txtSalida estructurada: -bbox, -tsv, -htmlmeta
Estas opciones generan salida estructurada para procesamiento programático:
-
-bbox: Genera HTML con coordenadas de cuadro delimitador para cada palabra. Útil para análisis posicional de texto.bash pdftotext -bbox input.pdf output.html -
-tsv: Emite valores separados por tabulaciones con datos de cuadro delimitador por bloque, línea y palabra. Columnas:level,page_num,par_num,block_num,line_num,word_num,left,top,width,height,conf,text.bash pdftotext -tsv input.pdf output.tsvEl modo TSV requiere poppler ≥ 22.05.0
Disponible en Ubuntu 22.10+, Fedora 37+, Arch rolling. Comprueba tu versión con
pdftotext --version. -
-htmlmeta: Genera HTML con los metadatos del PDF (título, autor) incrustados.bash pdftotext -htmlmeta input.pdf output.html -
-bbox-layout: Como-bboxpero conserva la estructura del diseño en la salida HTML.
Limpieza de texto: -nodiag, -remove-hyphens, -eol
-
-nodiag: Descarta el texto diagonal. Es útil para eliminar texto de marcas de agua que aparece en ángulo en el PDF.bash pdftotext -nodiag input.pdf output.txt -
-remove-hyphens all|soft|none: Controla cómo se tratan los guiones de fin de línea:all: Elimina todos los guiones de fin de línea y fusiona las palabras (por defecto)soft: Solo elimina los guiones suaves (U+00AD), conserva los guiones ASCIInone: Conserva todos los guiones y saltos de línea
bash pdftotext -remove-hyphens all input.pdf output.txt pdftotext -remove-hyphens soft input.pdf output.txt-remove-hyphens requiere poppler ≥ 26.05.0
Esta opción se añadió en mayo de 2026. NO está en Ubuntu 24.04 (incluye 24.02.0). Solo disponible en distros rolling (Arch) o mediante compilación manual. No tiene efecto en los modos
-rawo-layout. -
-eol unix|dos|mac: Establece la convención de fin de línea en el texto de salida. Por defecto es la del SO anfitrión.bash pdftotext -eol dos input.pdf output.txt
Codificación de salida y otras opciones: -enc, -nopgbrk, -q, -r
-
-enc encoding: Establece la codificación del texto de salida. Valores comunes:UTF-8,ISO-8859-1,ASCII,UCS-2.bash pdftotext -enc UTF-8 input.pdf output.txt -
-nopgbrk: Elimina los caracteres de salto de página (^L) entre páginas. El comportamiento por defecto los inserta. -
-q: Modo silencioso. Suprime los mensajes de error. -
-r number: Establece la resolución en DPI (por defecto: 72). Afecta a la salida de algunas opciones dependientes del renderizado. -
-x number -y number -W number -H number: Coordenadas del área de recorte. Define una región rectangular de la que extraer texto.bash pdftotext -x 100 -y 100 -W 400 -H 600 input.pdf output.txt -
-cropbox: Usa el cuadro de recorte (crop box) en lugar del cuadro de medios (media box) (con-bbox).
Puedes ver la lista completa de opciones con:
pdftotext -hExtraer texto de PDFs protegidos con contraseña
Muchos PDFs tienen restricciones que impiden copiar o imprimir texto. pdftotext puede manejar dos tipos de contraseñas.
Uso de las opciones -opw y -upw
-
-opw "password"— Contraseña de propietario. Omite todas las restricciones (imprimir, copiar, modificar). Úsala cuando el PDF te deja abrirlo pero bloquea la extracción de texto.bash pdftotext -opw "ownerpass" restricted.pdf output.txt -
-upw "password"— Contraseña de usuario. Requerida para abrir el archivo en absoluto. Úsala cuando el PDF pide una contraseña al abrirlo.bash pdftotext -upw "userpass" locked.pdf output.txt
Si obtienes el código de salida 3 o errores de “Permission denied”, el PDF tiene restricciones. Prueba -opw primero.
Descifrado con qpdf antes de la extracción
Para cifrados complejos o cuando las opciones de contraseña de pdftotext no funcionan, descifra el PDF primero con qpdf:
# Instalar qpdf
sudo apt install qpdf
# Descifrar
qpdf --password=secret --decrypt locked.pdf unlocked.pdf
# Después extraer
pdftotext unlocked.pdf output.txtEsto elimina toda la protección por contraseña de forma permanente de unlocked.pdf, así que manéjalo en consecuencia.
Cuando pdftotext no funciona: OCR para PDFs escaneados
pdftotext no puede leer PDFs escaneados
Si tu PDF se creó escaneando documentos en papel, contiene imágenes, no texto. pdftotext producirá una salida vacía o casi vacía. Necesitas OCR (reconocimiento óptico de caracteres) para añadir una capa de texto.
Esta es la razón número uno por la que pdftotext “no funciona” para la gente. Un PDF escaneado parece tener texto en pantalla, pero el texto en realidad es una imagen de texto.
Cómo detectar un PDF escaneado o basado en imágenes
Comprobación rápida:
pdftotext suspect.pdf - | wc -cSi el recuento de bytes es muy bajo (menos de 100 bytes para un documento de varias páginas), el PDF casi seguro está escaneado. También puedes usar pdfinfo:
pdfinfo suspect.pdf | grep PagesSi muestra muchas páginas pero pdftotext apenas extrae nada, está escaneado.
Solución 1: OCRmyPDF + Tesseract
OCRmyPDF añade una capa de texto OCR invisible a los PDFs escaneados, haciéndolos buscables y extraíbles:
# Instalar
sudo apt install ocrmypdf tesseract-ocr
# Añadir capa de texto OCR
ocrmypdf scanned.pdf searchable.pdf
# Ahora extraer el texto
pdftotext searchable.pdf output.txtVerifica que funcionó:
pdftotext searchable.pdf - | wc -c
# Debería mostrar un recuento de bytes sustancialPara PDFs que no están en inglés, instala el paquete de idioma de Tesseract apropiado:
# Francés
sudo apt install tesseract-ocr-fra
# Alemán
sudo apt install tesseract-ocr-deu
# Después especifica el idioma
ocrmypdf -l fra scanned.pdf searchable.pdfSolución 2: pdftoppm + tesseract directamente
Si OCRmyPDF no está disponible o necesitas más control sobre el proceso de OCR, convierte las páginas del PDF a imágenes primero y luego ejecuta Tesseract:
# Convertir las páginas del PDF a imágenes PPM a 300 DPI
pdftoppm -r 300 scanned.pdf page
# OCR de la primera página
tesseract page-1.ppm output
# La salida estará en output.txtEste enfoque te da control sobre la resolución y el procesamiento página a página, pero tendrás que hacer el bucle sobre varias páginas tú mismo.
Herramientas alternativas de línea de comandos para extraer texto de PDF
pdftotext cubre la mayoría de casos, pero a veces necesitas otra herramienta. Esto es cuándo recurrir a algo distinto.
| Herramienta | Cuándo usarla | Instalación |
|---|---|---|
| mutool draw | Diseños complejos donde pdftotext desordena las columnas | sudo apt install mupdf-tools |
| pdfgrep | Buscar en PDFs sin extraer todo | sudo apt install pdfgrep |
| xpdf pdftotext | Datos tabulares (tiene un modo -table que poppler no tiene) |
sudo apt install xpdf |
| calibre ebook-convert | Flujos de trabajo con ebooks, motor de extracción distinto | sudo apt install calibre |
Si prefieres una GUI web para operaciones con PDF, echa un vistazo a manipulación de PDF autoalojada con Stirling PDF — corre en Docker y maneja extracción, conversión, fusión y más desde el navegador.
mutool draw (MuPDF)
A veces maneja diseños complejos mejor que pdftotext:
mutool draw -F txt input.pdf -o output.txtpdfgrep — buscar en PDFs sin extracción completa
Cuando solo necesitas encontrar una cadena en un PDF, no extraerlo entero:
pdfgrep -n "search term" document.pdf
# Buscar en varios PDFs
pdfgrep -rn "search term" *.pdfxpdf pdftotext (con el modo -table)
La versión de pdftotext de xpdf tiene opciones que la de poppler no tiene, sobre todo -table para datos tabulares y -simple para diseños de una sola columna:
sudo apt install xpdf
pdftotext -table input.pdf output.txtpdftotext de xpdf vs poppler
Son dos binarios distintos con el mismo nombre. En Ubuntu, instalar xpdf puede cambiar qué pdftotext está en tu PATH. Compruébalo con which pdftotext y pdftotext --version para confirmar cuál estás ejecutando. La versión de xpdf muestra “xpdf version” en su salida; la de poppler muestra el copyright de “poppler”.
calibre ebook-convert
Una herramienta más pesada, pero útil para flujos de trabajo orientados a ebooks:
ebook-convert input.pdf output.txtProcesamiento por lotes y scripts prácticos
Extraer todos los PDFs de un directorio
for pdf in *.pdf; do
pdftotext -layout "$pdf" "${pdf%.pdf}.txt"
doneEsto crea un archivo .txt por cada .pdf en el directorio actual.
Pasar el texto extraído a grep para buscar
Busca dentro de un PDF sin crear archivos intermedios:
pdftotext document.pdf - | grep -i "keyword"Después de extraer texto, puedes cambiar mayúsculas y minúsculas con sed o hacer más procesamiento de texto en tu pipeline.
One-liner para verificar que la extracción funcionó
Úsalo en scripts para comprobar si la extracción produjo salida real:
test $(wc -c < output.txt) -gt 10 && echo "OK" || echo "LIKELY SCANNED PDF"Combínalo con contraseña y rango de páginas:
pdftotext -f 1 -l 5 -upw "mypass" -layout report.pdf pages1-5.txt
test $(wc -c < pages1-5.txt) -gt 10 && echo "Extraction OK" || echo "Failed or empty"Al procesar por lotes, también te puede resultar útil comparar el contenido de carpetas para verificar que se crearon todos los archivos de salida esperados.
Solución de problemas comunes de pdftotext
Salida vacía (PDF escaneado)
Síntoma: pdftotext produce un archivo de salida vacío o casi vacío.
Causa: El PDF es escaneado/basado en imágenes sin capa de texto.
Solución: Usa OCRmyPDF para añadir una capa de texto OCR (ver la sección de OCR más arriba).
Texto corrupto o faltante
Síntoma: El texto extraído tiene caracteres incorrectos, letras faltantes o salida corrupta.
Causa: El PDF usa codificaciones de fuentes personalizadas que pdftotext no puede mapear a Unicode.
Soluciones:
- Prueba el modo
-rawpara saltarte el procesamiento de diseño:bash pdftotext -raw input.pdf output.txt - Fuerza la codificación UTF-8:
bash pdftotext -enc UTF-8 input.pdf output.txt - Si poppler no puede con ello, prueba
mutool draw -F txtcomo alternativa.
Detección de columnas deficiente
Síntoma: Las columnas se fusionan entre sí o el texto de columnas distintas queda entrelazado.
Causa: La heurística de detección de columnas no coincide con el diseño del PDF.
Solución: Ajusta -colspacing (por defecto: 0.7). Los valores más bajos detectan separaciones de columna más estrechas:
pdftotext -layout -colspacing 0.3 input.pdf output.txtPrueba valores entre 0.3 y 1.5 hasta que el diseño se vea bien.
Texto de marca de agua en la salida
Síntoma: Texto diagonal de marca de agua (p. ej., “CONFIDENTIAL”, “DRAFT”) aparece en el texto extraído.
Causa: pdftotext extrae todo el texto, incluidas las capas diagonales.
Solución: Usa -nodiag para descartar el texto diagonal (poppler ≥ 0.80.0):
pdftotext -nodiag input.pdf output.txtEntender los códigos de salida de pdftotext
Para scripting y automatización, pdftotext devuelve códigos de salida significativos:
| Código de salida | Significado |
|---|---|
| 0 | Éxito |
| 1 | Error al abrir el archivo PDF |
| 2 | Error al abrir el archivo de salida |
| 3 | Error de permisos (el PDF tiene restricciones) |
| 99 | Otro error |
Úsalos en scripts:
pdftotext input.pdf output.txt
case $? in
0) echo "Success" ;;
1) echo "Cannot open PDF" ;;
3) echo "PDF has restrictions — try -opw option" ;;
*) echo "Unknown error" ;;
esacConclusión
pdftotext de poppler-utils es la herramienta por defecto para extraer texto de PDFs en Linux. Cubre la mayoría de casos de fábrica: conversión básica, preservación del diseño, selección de páginas, control de codificación y archivos protegidos con contraseña. Para PDFs escaneados, combínalo con OCRmyPDF y Tesseract. Para datos tabulares que pdftotext destroza, prueba el modo -table de xpdf o mutool draw.
Para más trabajo con PDF desde la línea de comandos, puedes fusionar archivos PDF con pdfunite o autoalojar Stirling PDF como toolkit basado en navegador. Y si estás desarrollando tus habilidades de administración Linux, echa un vistazo a las guías sobre securizar tu servidor SSH y comprobar puertos remotos con nc.


