CodeGym /Curso de Java /Python SELF ES /Unir varios archivos PDF en un solo documento

Unir varios archivos PDF en un solo documento

Python SELF ES
Nivel 43 , Lección 3
Disponible

1. Combinando PDFs con PyPDF2

¿Por qué unir archivos PDF?

Primero que nada, vamos a entender por qué surge la necesidad de unir archivos PDF. Como dicen, "¡Un PDF es mejor que diez!". En un entorno de trabajo, puedes tener informes, resultados de investigación, documentación técnica o presentaciones que se entregan como archivos separados. Cambiar constantemente entre ellos no solo es incómodo, sino que también es arriesgado, ¡podrías pasar algo por alto! Al combinar todos los archivos en un solo documento, simplificarás el trabajo con esos datos y crearás un enfoque más estructurado para analizarlos y compartirlos.

Además, unir archivos PDF es útil para archivarlos posteriormente, crear un informe final único o juntar varias versiones de un documento para rastrear cambios. En fin, ¡las posibilidades son muchas!

Conceptos básicos del uso de PyPDF2 para combinar PDFs

Para comenzar, vamos a usar los conceptos básicos de PyPDF2. Crearemos un script que combine varios archivos PDF en uno solo. Por supuesto, el código vendrá acompañado de comentarios, para que entiendas qué está pasando en cada etapa.

Python

import PyPDF2

# Creamos un objeto PdfMerger de la biblioteca PyPDF2
pdf_merger = PyPDF2.PdfMerger()

# Lista de documentos PDF que queremos combinar
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']

# Bucle para añadir cada archivo al objeto PdfMerger
for file in pdf_files:
    pdf_merger.append(file)

# Guardamos el resultado en un nuevo archivo PDF
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

# Cerramos el objeto PdfMerger para liberar recursos
pdf_merger.close()

print(f"PDF combinado creado: {output_filename}")

El orden y la estructura del documento combinado

Ahora que hemos aprendido a combinar documentos PDF, es importante considerar el orden de las páginas. Recuerda que PyPDF2 agrega las páginas en el mismo orden en el que pasaste los archivos al método .append(). Por lo tanto, el orden en la lista pdf_files afecta el orden del documento final.

2. Combinando páginas individuales

Si deseas no solo combinar documentos completos, sino crear un documento final a partir de partes de ellos, necesitas usar la clase PdfWriter en lugar de PdfMerger. Ejemplo:

Python

import PyPDF2

# Lista de archivos PDF que se deben combinar
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

# Crear un objeto PdfWriter para escribir el PDF combinado
pdf_writer = PyPDF2.PdfWriter()

# Recorremos cada archivo PDF
for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # Añadimos cada página al PdfWriter
        for page_num in range(len(pdf_reader.pages)):
            # Aquí puedes omitir páginas que no quieras añadir
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Guardar el PDF combinado
with open("merged_document.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

¿Cómo funciona este código?

  1. Crear una lista de archivos: La lista pdf_files contiene los caminos a los documentos PDF que se deben combinar.
  2. Inicializar PdfWriter: pdf_writer se usa para crear el nuevo archivo PDF.
  3. Recorremos cada archivo: Cada archivo PDF se abre en modo lectura.
  4. Añadimos las páginas: Todas las páginas del archivo se añaden sucesivamente al objeto pdf_writer usando add_page().
  5. Guardamos el resultado: Después de añadir todas las páginas, el nuevo archivo PDF se escribe como merged_document.pdf.

3. Estilizando el nuevo documento

Añadiendo marcadores e índice

¿Qué hacer si tu documento combinado se ha vuelto demasiado grande y es difícil navegar por él? En ese caso, los marcadores pueden ayudarte. PyPDF2 permite agregar marcadores básicos para facilitar la navegación por el documento. Vamos a añadir marcadores para cada documento que combinemos.

Python

pdf_merger = PyPDF2.PdfMerger()

# Índice de página para los marcadores
page_offset = 0

for file in pdf_files:
    # Leer el documento actual
    pdf_reader = PyPDF2.PdfReader(file)

    # Añadir el documento al PdfMerger
    pdf_merger.append(file)

    # Añadir un marcador con el nombre del archivo
    pdf_merger.add_bookmark(file, page_offset)

    # Actualizar el desplazamiento de páginas
    page_offset += len(pdf_reader.pages)

with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

pdf_merger.close()

Este pequeño truco te ayudará a mantenerte tranquilo y evitar perderte en un mar de PDFs.

Actualizar los metadatos del archivo combinado

Después de combinar, puedes añadir o cambiar los metadatos del documento, como el autor, el título y las palabras clave.

Python

import PyPDF2

pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()

for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        for page_num in range(len(pdf_reader.pages)):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Añadir metadatos
pdf_writer.add_metadata({
    "/Title": "Documento combinado",
    "/Author": "Iván Ivánov",
    "/Subject": "Reporte de ventas"
})

# Guardar el archivo combinado
with open("merged_with_metadata.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Este código añade metadatos que ayudarán a identificar y estructurar el documento.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION