Última actualización: 29 de enero, 2025

Título - Trabajando con archivos PDF en Python

En este artículo, le guiaremos sobre cómo trabajar con archivos PDF usando Python. Para esto, utilizaremos la biblioteca pypdf.

Usando la biblioteca pypdf, demostraremos cómo realizar las siguientes operaciones en Python:

  • Extracción de texto de PDFs
  • Rotación de páginas de PDF
  • Fusión de múltiples PDFs
  • División de PDFs en archivos separados
  • Adición de marcas de agua a las páginas de PDF

Nota: Este artículo cubre muchos detalles valiosos, así que siéntase libre de saltar a las secciones que más le interesen. El contenido está organizado para una navegación fácil, para que pueda enfocarse rápidamente en lo más relevante para usted.

Ilustración - Trabajando con archivos PDF en Python

Códigos de Ejemplo

Puede descargar todo el código de ejemplo utilizado en este artículo desde el siguiente enlace. Incluye el código, los archivos de entrada y los archivos de salida.

Instalación de pypdf

Para instalar pypdf, simplemente ejecute el siguiente comando en su terminal o símbolo del sistema:

pip install pypdf

Nota: El comando anterior es sensible a mayúsculas y minúsculas.

1. Extrayendo texto de un archivo PDF usando Python

Explicación del Código

1. Creando un Objeto Lector de PDF

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) carga el archivo PDF en un objeto lector.
  • Este objeto permite acceder a las páginas y su contenido.

2. Recorriendo las Páginas

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages devuelve una lista de páginas en el PDF.
  • enumerate(..., start=1) asigna un número de página comenzando desde 1.

3. Imprimiendo el Texto Extraído

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Separador para mejor legibilidad
  • page.extract_text() extrae el contenido de texto de la página actual.
  • El script imprime el texto extraído junto con el número de página.
  • "-" * 50 imprime una línea separadora (--------------------------------------------------) para una mejor legibilidad.

Archivo PDF de Entrada Usado en el Código

Salida del Código

2. Rotando Páginas de PDF usando Python

Explicación del Código

El código básicamente rota la primera página 90° en sentido horario y guarda el PDF modificado sin afectar a otras páginas.

1. Importar Clases Necesarias

from pypdf import PdfReader, PdfWriter
  • PdfReader: Lee el PDF de entrada.
  • PdfWriter: Crea un nuevo PDF con modificaciones.

2. Definir Rutas de Archivos de Entrada y Salida

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • El script lee desde input.pdf y guarda el archivo modificado como rotated_output.pdf.

3. Leer el PDF y Crear un Objeto Escritor

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader carga el PDF existente.
  • writer se usa para almacenar las páginas modificadas.

4. Rotar la Primera Página 90 Grados

page = reader.pages[0]
page.rotate(90)  # Rotar 90 grados en sentido horario
writer.add_page(page)
  • Extrae la página 1, la rota 90 grados, y la añade al nuevo PDF.

5. Añadir Páginas Restantes Sin Cambios

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Recorre las páginas restantes y las añade tal como están.

6. Guardar el Nuevo PDF

with open(output_pdf, "wb") as file:
    writer.write(file)
  • Abre rotated_output.pdf en modo de escritura binaria y guarda el nuevo PDF.

7. Imprimir Confirmación

print(f"Páginas rotadas guardadas en {output_pdf}")
  • Muestra un mensaje de éxito.

Archivo PDF de Entrada Usado en el Código y Su Salida Rotada

Captura de Pantalla Captura de Pantalla de Página Rotada en PDF Usando Python

3. Fusionar Archivos PDF usando Python

Este script de Python demuestra cómo fusionar múltiples archivos PDF de un directorio en un solo PDF usando la biblioteca PyPDF.

Explicación del Código

  • Este script fusiona automáticamente todos los archivos PDF encontrados en el directorio especificado (pdfs-to-merge) en un solo archivo de salida (merged_output.pdf).
  • Asegura que el directorio de salida exista y añade las páginas de cada PDF en el orden en el que están listadas.
  • Produce el archivo final fusionado en el subdirectorio output-dir.

Desglose del Código

1. Importar Librerías

import os
from pypdf import PdfReader, PdfWriter
  • os: Utilizado para interactuar con el sistema de archivos, como leer directorios y gestionar rutas de archivos.
  • PdfReader: Lee el contenido de un archivo PDF.
  • PdfWriter: Crea y escribe un nuevo archivo PDF.

2. Definir Directorio y Archivo de Salida

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: Especifica la carpeta donde se almacenan los archivos PDF.
  • output_file: Define el nombre y la ruta del archivo PDF fusionado.

3. Crear Directorio de Salida si No Existe

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Esto asegura que el directorio de salida exista, y si no, lo crea.

4. Crear un Objeto PdfWriter

writer = PdfWriter()
  • writer se usa para recolectar y combinar todas las páginas de los PDFs.

5. Iterar Sobre Todos los Archivos PDF en el Directorio

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Añadiendo: {file_name}")
  • Este bucle recorre todos los archivos en el directorio especificado, comprobando archivos con extensión .pdf. Usa sorted() para procesarlos en orden alfabético.

6. Leer Cada PDF y Añadir Páginas al Writer

reader = PdfReader(file_path)
writer.append(reader)
  • Para cada PDF, PdfReader lee el archivo, y luego todas las páginas de ese PDF se añaden a writer.

7. Escribir el PDF Fusionado en un Archivo de Salida

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Después de recopilar todas las páginas, writer.write() escribe el PDF fusionado en la ruta de salida especificada.

8. Imprimir Confirmación

print(f"PDF fusionado guardado como: {output_path}")
  • Imprime un mensaje de éxito confirmando la ubicación del archivo PDF fusionado guardado.

Archivos PDF de Entrada Usados en el Código y el PDF de Salida Fusionado

4. Dividir un PDF usando Python

Explicación del Código

El script de Python anterior divide un PDF en páginas separadas usando la biblioteca PyPDF. Primero asegura que el directorio de salida exista, luego lee el archivo PDF de entrada. El script recorre cada página, crea un nuevo objeto PdfWriter, y guarda cada página como un archivo PDF individual. Los archivos de salida se nombran secuencialmente (por ejemplo, page_1.pdf, page_2.pdf) y se almacenan en la carpeta output-dir. Finalmente, imprime un mensaje de confirmación para cada archivo creado y notifica cuando el proceso ha concluido.

Archivo PDF de Entrada y Archivos de Salida Divididos

5. Añadiendo una Marca de Agua a un PDF usando Python

Puede añadir una marca de agua a un PDF usando la biblioteca PyPDF sobreponiendo un PDF de marca de agua sobre un PDF existente. Asegúrese de que el PDF de marca de agua tenga una sola página para que se aplique correctamente a cada página del PDF principal.

Explicación del Código

El script de Python anterior lee un PDF de entrada, extrae un PDF de marca de agua de una sola página, superpone la marca de agua en cada página del PDF de entrada y guarda el PDF final con la marca de agua.

Desglose del Código

Aquí tiene una breve explicación de cada parte:

1. Importar Clases Necesarias

from pypdf import PdfReader, PdfWriter
  • PdfReader se utiliza para leer PDFs existentes.
  • PdfWriter se utiliza para crear y escribir un nuevo PDF.

2. Definir Rutas de Archivos

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: El PDF original al que se añadirá la marca de agua.
  • watermark_pdf: Un PDF de una sola página que sirve como marca de agua.
  • output_pdf: El archivo de salida que contendrá las páginas con la marca de agua.

3. Leer PDFs

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Lee el PDF de entrada.
  • watermark: Lee el PDF de marca de agua.

4. Crear un Objeto Writer

writer = PdfWriter()
  • Este se usará para crear el PDF final con marca de agua.

5. Extraer Página de Marca de Agua

watermark_page = watermark.pages[0]
  • Supone que el PDF de marca de agua tiene solo una página, que se usa para superponer en todas las páginas.

6. Recorrer Páginas del PDF de Entrada y Fusionar Marca de Agua

for page in reader.pages:
    # Mezcla la marca de agua con la página actual
    page.merge_page(watermark_page)
    
    # Añade la página fusionada al escritor
    writer.add_page(page)
  • Itera a través de cada página de input_pdf.
  • merge_page(watermark_page) superpone la marca de agua encima de la página actual.
  • Añade la página modificada al writer.

7. Guardar el PDF con Marca de Agua

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Escribe las páginas modificadas en un nuevo archivo PDF.

8. Imprimir Confirmación

print(f"PDF con marca de agua guardado como: {output_pdf}")
  • Imprime la ruta del archivo de salida para confirmación.

PDF de Entrada, PDF de Marca de Agua y PDF de Salida con Marca de Agua

Captura de Pantalla Captura de Pantalla de PDF con Marca de Agua Usando Python

Conclusión

En esta guía, exploramos operaciones esenciales de PDF en Python, incluyendo la extracción de texto, rotación de páginas, fusión, división y adición de marcas de agua. Con estas habilidades, ahora puede construir su propio gestor de PDFs y automatizar varias tareas de PDF de manera eficiente.