Logo pdfly

Acabo de descubrir pdfly (pronunciado PDF-li en inglés), la navaja suiza para trabajar con PDF’s desde la línea de comandos (CLI). Se trata de una aplicación escrita puramente en Python, diseñada para extraer (meta)datos y manipular archivos PDF.

Está basado en las librerías fpdf2 y pypdf, es un proyecto de software libre y código abierto, sin afiliación comercial, y cuenta con una licencia BSD-3-Clause.


Instalación

pdfly requiere Python 3.10+ para funcionar correctamente. Asegúrate de tener una versión compatible antes de instalarlo.

Recomiendo instalarlo con pipx, que permite instalar aplicaciones “Python” para el CLI en tu PATH, crea automáticamente un entorno virtual aislado, instala la aplicación junto con sus dependencias en ese entorno, y añade un wrapper en tu PATH. Para instalarlo:

# En Linux/macOS
pip install pipx
pipx ensurepath

# Windows
scoop install pipx
pipx ensurepath

Ya estamos listos, instalo pdfly:

pipx install pdfly
pipx ensurepath

# En windows por ejemplo, salgo y vuelvo a entrar en el terminal
where pdfly
c:\Users\luis\.local\bin\pdfly.exe

Crea el envoltorio .local\bin\pdfly.exe, conocido técnicamente como wrapper o shim. Cuando lo ejecutas, busca dónde está su entorno virtual (<home>\pipx\venvs), localiza el intérprete de Python dentro de ese entorno y le pasa el script de inicio en python para interpretarlo. Quizá tengas que salir y entrar en el terminal, después ya puedes verificar la instalación y obtener ayuda general con:

pdfly --help

Extracción, información y metadatos

Inspección del PDF

pdfly ofrece varias herramientas para inspeccionar y extraer información de documentos PDF:

Extracción de metadatos completos: Este comando muestra información detallada sobre el documento, incluyendo metadatos del sistema operativo y del PDF.

pdfly meta documento.pdf

Información de páginas específicas: Para obtener detalles de una página específica, incluyendo dimensiones (mediabox, cropbox) y lista de anotaciones:

pdfly pagemeta documento.pdf <número-página>

Extracción de contenido:

pdfly permite extraer diferentes tipos de contenido:

  • Extracción de texto: Para extraer el texto de un PDF:
pdfly extract-text documento.pdf
  • Extracción de imágenes: Para extraer imágenes sin remuestreo ni alteración:
pdfly extract-images documento.pdf
  • Extracción de páginas con anotaciones: Para extraer solo las páginas que contienen anotaciones:
pdfly extract-annotated-pages documento.pdf

Organización, seguridad y reparación

Fusión, división y extracción de páginas

pdfly permite manipular páginas de documentos PDF de forma muy flexible usando el comando pdfly cat:

Importante: Los índices de página comienzan en cero y usan sintaxis de slices de Python, similar a cómo funcionan los rangos en Python.

Ejemplo de extracción de páginas: Extrae las páginas 1, 2 y 3

pdfly cat input.pdf 1:4 -o out.pdf

Nota sobre rangos negativos: Para rangos que comienzan con un valor negativo, se debe usar -- para separarlos de las opciones de línea de comandos:

pdfly cat input.pdf -- -5:-1 -o ultimas-paginas.pdf

Eliminación y rotación de páginas

Eliminación de páginas:

pdfly rm documento.pdf <página1> <página2> -o documento-sin-paginas.pdf

Rotación de páginas:

pdfly rotate documento.pdf <página> <grados> -o documento-rotado.pdf

Funcionalidades de impresión

pdfly incluye funciones útiles para preparar documentos para impresión:

  • pdfly 2-up: Organiza el documento en formato 2-up (dos páginas por hoja)
  • pdfly booklet: Crea un formato de libreta para impresión
pdfly booklet input.pdf salida.pdf

Seguridad y reparación

Firma Digital:

pdfly permite firmar documentos PDF digitalmente usando certificados PKCS12.

pdfly sign input.pdf --p12 mi-certificado.p12 -p <contraseña-del-archivo-p12> -o signed.pdf

Verificación de Firmas:

Para verificar la firma de un documento PDF firmado con un PKCS12, necesito el certificado PEM con el que comprobarlo. En este ejemplo lo saco de mi propio certificado.

openssl pkcs12 -in mi-certificado.p12 -clcerts -nokeys -out certs.pem

Hago la comprobación

pdfly check-sign firmado.pdf --pem certs.pem
Check succeeded.

Reparación de Archivos:

Si un archivo PDF ha sido editado manualmente y tiene problemas con los offsets y longitudes en la sección xref, pdfly puede repararlo:

pdfly update-offsets documento-corrupto.pdf -o documento-reparado.pdf

Este comando corrige los offsets y longitudes en la sección xref del documento.

Conclusión

pdfly es una verdadera “navaja suiza” integral para la gestión de PDF desde el CLI. El proyecto utiliza el modelo de gobierno de “Dictador Benevolente” (Benevolent Dictator), ahora es Martin Thoma. La comunidad está abierta a retroalimentación y contribuciones, y siempre se buscan nuevos colaboradores.

La navaja suiza en el CLI
La navaja suiza en el CLI

Si trabajas frecuentemente con archivos PDF desde la línea de comandos, pdfly es definitivamente una herramienta que deberías tener en tu arsenal.

Enlaces Interesantes