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.
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:
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?
-
Crear una lista de archivos: La lista
pdf_files
contiene los caminos a los documentos PDF que se deben combinar. -
Inicializar PdfWriter:
pdf_writer
se usa para crear el nuevo archivo PDF. - Recorremos cada archivo: Cada archivo PDF se abre en modo lectura.
-
Añadimos las páginas: Todas las páginas del archivo se añaden
sucesivamente al objeto
pdf_writer
usandoadd_page()
. -
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.
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.
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.
GO TO FULL VERSION