CodeGym /Curso de Java /Python SELF ES /Separación de páginas de un documento PDF para guardar pa...

Separación de páginas de un documento PDF para guardar partes individuales

Python SELF ES
Nivel 43 , Lección 4
Disponible

1. Separación de un documento PDF en páginas

Bases de la separación de PDFs usando PyPDF2

PyPDF2 ofrece la clase PdfReader para abrir archivos PDF y leer páginas, y la clase PdfWriter para escribir páginas en un nuevo documento PDF. Para separar un documento en páginas individuales se usa add_page() de PdfWriter, para guardar las páginas necesarias en archivos separados.

Guardar cada página de un PDF como un documento separado

Este código separa un documento, creando un archivo PDF independiente para cada página del archivo original.

Python

import PyPDF2

# Abrimos el archivo PDF
with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    
    # Recorremos cada página
    for page_num in range(len(pdf_reader.pages)):
        pdf_writer = PyPDF2.PdfWriter()
        
        # Extraemos la página y la añadimos a un nuevo PDF
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)
        
        # Guardamos la página actual como un archivo PDF separado
        output_filename = f"page_{page_num + 1}.pdf"
        with open(output_filename, "wb") as output_file:
            pdf_writer.write(output_file)

print("Cada página ha sido guardada como archivo separado.")

En este ejemplo cada página del documento original se guarda en un archivo separado page_1.pdf, page_2.pdf y así sucesivamente.

2. Extracción de un rango de páginas

A veces es necesario guardar no todas las páginas, sino un rango específico de páginas, por ejemplo, de la 1 a la 5. Para ello puedes indicar las páginas específicas en un bucle.

Python

import PyPDF2

with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    pdf_writer = PyPDF2.PdfWriter()
    
    # Definimos el rango de páginas, por ejemplo, páginas de la 1 a la 5
    start_page = 1
    end_page = 5
    
    for page_num in range(start_page - 1, end_page):  # La numeración empieza desde 0
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)

    # Guardamos el rango de páginas como un nuevo PDF
    with open("pages_1_to_5.pdf", "wb") as output_file:
        pdf_writer.write(output_file)

print("El rango de páginas ha sido guardado exitosamente.")

Este código extrae las páginas de la 1 a la 5 y las guarda en el archivo pages_1_to_5.pdf.

3. Guardar varios rangos

Si necesitas extraer varios rangos de páginas y guardarlos en archivos separados, puedes usar una función que acepte el inicio y el final del rango.

Python

import PyPDF2

def save_page_range(input_pdf, output_pdf, start_page, end_page):
    with open(input_pdf, "rb") as pdf_file:
        pdf_reader = PyPDF2.PdfReader(pdf_file)
        pdf_writer = PyPDF2.PdfWriter()
        
        for page_num in range(start_page - 1, end_page):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

        with open(output_pdf, "wb") as output_file:
            pdf_writer.write(output_file)
    
    print(f"Páginas {start_page}–{end_page} guardadas en {output_pdf}")

# Usar la función para extraer diferentes rangos
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)

Este código crea dos funciones para guardar las páginas de la 1 a la 3 y de la 4 a la 6, que se guardan en section_1.pdf y section_2.pdf respectivamente.

4. Procesamiento en masa de documentos PDF

Automatización de la separación de PDFs para todas las páginas en una carpeta

Si necesitas separar cada página de todos los documentos PDF en una carpeta específica, puedes crear un script que procese automáticamente cada archivo.

Python

import PyPDF2
import os

# Ruta a la carpeta con archivos PDF
folder_path = "pdf_folder"

# Separación automática de todos los PDFs en la carpeta
for filename in os.listdir(folder_path):
    if filename.endswith(".pdf"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "rb") as pdf_file:
            pdf_reader = PyPDF2.PdfReader(pdf_file)
            
            # Separar el archivo en páginas individuales
            for page_num in range(len(pdf_reader.pages)):
                pdf_writer = PyPDF2.PdfWriter()
                page = pdf_reader.pages[page_num]
                pdf_writer.add_page(page)
                
                # Crear el nombre del archivo de salida
                output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
                output_path = os.path.join(folder_path, output_filename)
                
                # Guardar la página
                with open(output_path, "wb") as output_file:
                    pdf_writer.write(output_file)

print("Todas las páginas de cada archivo PDF en la carpeta han sido guardadas exitosamente.")

Este script recorre automáticamente cada archivo PDF en la carpeta pdf_folder y guarda cada página como un PDF con el nombre <nombre_archivo>_page_<número>.pdf.

5. ¿Cuándo es necesario dividir archivos PDF?

Como decía un gran desarrollador, que al igual que nosotros después de largas horas de codificación, a menudo surge la pregunta: "¿Por qué?". Dividir los documentos PDF puede ser necesario en diferentes situaciones:

  • Resaltar páginas clave: Comparte solo las páginas necesarias sin enviar toda "Guerra y Paz" a tus colegas.
  • Crear compilaciones: Guarda capítulos importantes de diferentes documentos en un solo archivo para propósitos educativos o laborales.
  • Archivado: Almacena un archivo de datos importantes, página por página, para no perder información valiosa entre páginas innecesarias.

Aquí es donde nuestro héroe PyPDF2 entra en acción para simplificarte la vida.

6. Dificultades ocasionales y cómo evitarlas

Al trabajar con documentos PDF, puedes encontrarte con algunos problemas. Por ejemplo, la numeración de páginas en PyPDF2 empieza desde cero, así que no olvides tener esto en cuenta al especificar las páginas que necesitas. ¡No hay nada peor que gastar tiempo extrayendo las páginas equivocadas!

Además, al trabajar con archivos abiertos y cerrados, asegúrate de que todos los close() se llamen correctamente. Un libro abierto puede convertirse en un dolor, especialmente si es un manual de Oracle.

Aplicación en la vida real

Usar este método no es solo útil para trabajar con documentos personales. Por ejemplo, si trabajas en una firma legal y necesitas preparar rápidamente ciertas secciones de un caso voluminoso para un juicio, dividir PDFs puede ahorrar mucho tiempo y esfuerzo.

Estas técnicas también pueden ser utilizadas para preparar materiales educativos, resaltar secciones importantes de informes técnicos y mucho más. ¡La verdadera magia está en lo fácil que es automatizar estas tareas repetitivas!

1
Опрос
Lectura de archivos pdf con PyPDF2,  43 уровень,  4 лекция
недоступен
Lectura de archivos pdf con PyPDF2
Lectura de archivos pdf con PyPDF2
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION