Unir varios PDFs nunca fue tan fácil: Hazlo gratis con Python
¡Hola, hola Omesitos! Bienvenidos a un nuevo tutorial, en el que les mostraré como hago para unir PDFs utilizando Python. Este tutorial es parte de nuestra sección “Python para el día a día”, en la que exploramos herramientas y packages que pueden facilitarnos tareas cotidianas. Así que, ¡vamos a por ello!
¿Por qué unir PDFs con Python?
¿Alguna vez te has encontrado con la necesidad de combinar varios PDFs y las herramientas gratuitas no eran lo suficientemente prácticas? O tal vez has considerado opciones de pago, pero resultaban costosas. ¡No te preocupes! Con Python puedes unir PDFs de manera fácil, rápida y completamente gratuita.
¿Qué necesitamos para unir PDFs con Python?
Para mantenerlo sencillo vamos a usar Google Colab, es decir, lo haremos online. Allí podremos programar en Python. Entonces necesitaremos:
- Una cuenta en Google Drive.
- Tener instalado en esta cuenta Google Colab. (Esto lo vimos en este tutorial: ¿Qué es Google Colab y cómo usarlo? Python en la nube fácil y rápido)
- Vamos a usar el package: PyPDF2.
- Los PDFs que desees unir, organizados en una carpeta en tu Drive.
¡Vamos con la programación!
1. Instalar PyPDF2
Lo primero que tendremos que hacer es instalar PyPDF2, para ello vamos a la primera celda y digitamos:
!pip install PyPDF2
Esperamos a que se realice la instalación.
2. Conexión entre Google Colab y Drive
Para poder usar los archivos PDF que subimos a Drive, necesitaremos darle permisos a Google Colaboratory para que nos permita extraer esos archivos de Drive. Para ello tendremos que ejecutar la siguiente celda:
from google.colab import drive drive.mount('/content/drive')
Luego, verifica que tengas acceso a tus archivos. En la barra lateral de Google Colab, verás una carpeta llamada drive. Dentro de ella, busca My Drive y localiza la carpeta con los PDFs que deseas unir.
3. Unir archivos PDF y exportar el archivo combinado
Antes de pasar a la programación, debemos tener en cuenta como deben estar nombrados los PDFs para concatenarlos en orden.
¿Cómo deben estar nombrados los PDFs para unirlos en orden?
Para asegurarnos de que los archivos PDF se concatenen en el orden deseado, es importante que sus nombres contengan un sufijo numérico al inicio del nombre del archivo. Este sufijo define el orden en el que los PDFs serán procesados por el programa. La estructura recomendada es:
- Número inicial como sufijo: El nombre de cada archivo debe comenzar con un número seguido de un guion bajo (
_
). Este número será utilizado para ordenar los archivos de menor a mayor. - Formato uniforme: Todos los números deben tener la misma cantidad de dígitos para garantizar un orden correcto. Por ejemplo:
- Usa
000_
,001_
,002_
en lugar de0_
,1_
,2_
. Esto evita problemas al ordenar alfabéticamente, ya que10_
aparecería antes de2_
si no se completan los dígitos.
- Usa
- Nombres descriptivos: Después del número inicial, puedes incluir un nombre descriptivo que identifique el contenido del archivo. Esto no afecta el orden, pero hace más fácil reconocer los archivos.
Ejemplos:
000_Pdf1.pdf
001_Pdf2.pdf
002_Pdf3.pdf
003_Pdf4.pdf
Ahora sí, usaremos PdfMerger de PyPDF2 para combinar los archivos PDF. A continuación veremos como hacerlo:
from PyPDF2 import PdfMerger import os # Configuración: Especifica el directorio de entrada y el archivo de salida directorio_pdfs = "/content/drive/MyDrive/Directorio_PDFs" archivo_salida = "/content/drive/MyDrive/pdf_concatenado.pdf" # Verificar si el directorio especificado existe if not os.path.exists(directorio_pdfs): print(f"Error: El directorio '{directorio_pdfs}' no existe. Verifica la ruta.") exit() # Obtener una lista de archivos PDF en el directorio y ordenarlos por números al inicio del nombre archivos_pdf = sorted( [os.path.join(directorio_pdfs, archivo) for archivo in os.listdir(directorio_pdfs) if archivo.endswith(".pdf")], key=lambda x: int(os.path.basename(x).split('_')[0])) # Extraer y convertir el número inicial en un entero # Crear una instancia del objeto PdfMerger para fusionar los PDFs fusionador_pdfs = PdfMerger() # Agregar cada archivo PDF al fusionador for archivo_pdf in archivos_pdf: fusionador_pdfs.append(archivo_pdf) print(f"Agregado: {archivo_pdf}") # Guardar el archivo concatenado fusionador_pdfs.write(archivo_salida) fusionador_pdfs.close() print(f"---\nPDF concatenado creado con éxito: {archivo_salida}")
En primer lugar importamos PdfMerger que nos servirá para concatenar los pdfs, e importamos os, que nos ayudará a leer los archivos de un directorio o carpeta.
En las líneas 5 y 6, se configuran dos rutas importantes: la carpeta que contiene los archivos PDF a concatenar (directorio_pdfs
) y el nombre junto con la ubicación del archivo combinado resultante (archivo_salida
).
De la línea 9 a la 11, el programa verifica si el directorio de entrada especificado existe utilizando os.path.exists()
. Si la carpeta no se encuentra, se imprime un mensaje de error indicando que la ruta no es válida y el programa se detiene con exit()
. Esto previene errores posteriores al intentar acceder a una ubicación inexistente.
Después, de la línea 14 a la 16 se crea una lista de archivos PDF en el directorio especificado. Usando una comprensión de lista, se filtran solo los archivos con extensión .pdf
. Estos archivos se ordenan alfabéticamente por el número inicial en sus nombres, utilizando la función sorted()
y un criterio de orden basado en extraer y convertir ese número a un entero. Esto asegura que los archivos se unan en el orden correcto.
En la línea 19, una instancia de la clase PdfMerger
de PyPDF2
se crea para gestionar la fusión de los archivos. Este objeto actúa como un contenedor donde se agregan los documentos PDF que se desean combinar. Cada archivo PDF de la lista previamente generada se añade a este contenedor dentro de un bucle for
. Durante este proceso, se imprime un mensaje en la consola que indica qué archivo ha sido añadido, lo cual resulta útil para monitorear el progreso.
Finalmente, el archivo combinado se guarda en la ruta especificada en archivo_salida
usando el método write()
del objeto PdfMerger
. Una vez completada la fusión, el objeto se cierra con el método close()
para liberar los recursos utilizados. El programa finaliza imprimiendo un mensaje en la consola que confirma la creación exitosa del archivo concatenado, junto con su ubicación en el sistema de archivos.
Limitaciones al Unir archivos PDF
- Dependencia de los Nombres de Archivo: El programa asume que los nombres de los archivos comienzan con números seguidos de un guion bajo (_) para ordenarlos. Si los archivos no siguen esta convención, no se ordenarán correctamente.
- PDFs está corruptos o protegidos: Si alguno de los PDFs está corrupto, incompleto o protegido por contraseña, el programa podría fallar al intentar abrirlo.
- Límite de Memoria: El programa utiliza la RAM para cargar y procesar los archivos PDF durante la concatenación, almacenándolos temporalmente en memoria antes de generar el archivo combinado. Si los PDFs son muy grandes o hay muchos archivos, el consumo de memoria puede superar la capacidad del sistema, provocando errores, bloqueos o lentitud.
Y bien, hemos llegado al final de este tutorial. ¡Espero que te haya gustado y lo hayas encontrado útil!. Nos vemos en un siguiente post.
Hola Gabi, Feliz Navidad, te escribo este mensaje con la finalidad de darte las gracias por tu valioso contenido, el cual me ha permitido avanzar de manera exponencial en con las lecturas de datos de mis clientes, un Cálido high five