Introducción
Ya hemos trabajado anteriormente con Python para muchas cosas. Hoy veremos cómo poner un pie de página a cualquier documento PDF.
Veremos cómo poner un texto, número o cualquier mensaje que queramos.
Esto funciona cuando queremos poner nuestro nombre a algún documento, o modificar un documento PDF que no podemos editar.
El proceso es realmente sencillo, sólo necesitamos Python y algunas librerías que instalaremos con Pip. Recuerda que si no tienes instalado pip o Python, aquí hay un excelente tutorial.
Librerías o requisitos
Como siempre, necesitamos Python y pip. Aquí un tutorial.
Una vez que tengamos todo instalado, necesitamos 2 librerías más: PyPDF2 y ReportLab. Más abajo veremos cómo instalarlas.
Instalar PyPDF2
Ejecutamos lo siguiente en la línea de comandos:
pip install PyPDF2
Instalar ReportLab
Ejecutamos lo siguiente:
pip install reportlab
Ahora sí estamos listos.
Archivo de ejemplo
Para ejemplificar lo que aquí se verá, se utilizará un PDF normal que es de uno de mis posts:
Poner mensaje en pie de página
Para mí, esta opción es la más útil. Podría servir para poner nuestra “marca de agua” en los documentos que generemos. En fin, podemos poner cualquier mensaje deseado.
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
nombre_pdf_original = "post.pdf" # Cambia aquí el nombre de tu documento original
nombre_pdf_salida = "post_con_mensaje.pdf" # Cambia aquí el nombre del PDF de salida
mensaje = "Este es un pie de página :)"
packet = io.BytesIO()
mi_canvas = canvas.Canvas(packet, pagesize=letter)
"""
También podemos cambiar las coordenadas del mensaje.
La posición (0, 0) es la esquina inferior izquierda
por eso es que nuestro mensaje sale tan cerca a
dicho lugar
"""
mi_canvas.drawString(5, 5, mensaje)
mi_canvas.save()
packet.seek(0)
pdf_con_pie = PdfFileReader(packet)
pdf_existente = PdfFileReader(open(nombre_pdf_original, "rb"))
output = PdfFileWriter()
# Iterar desde 0 hasta el número de páginas de nuestro documento
numero_de_paginas = pdf_existente.getNumPages()
for numero in range(0, numero_de_paginas):
page = pdf_existente.getPage(numero)
page.mergePage(pdf_con_pie.getPage(0))
print("Agregando mensaje \"{}\" a la página {} de {}".format(mensaje, numero + 1, numero_de_paginas))
output.addPage(page)
outputStream = open(nombre_pdf_salida, "wb")
output.write(outputStream)
outputStream.close()
El código se explica por sí mismo. Simplemente creamos un documento PDF temporal, con el mensaje que pusimos y luego lo “combinamos” con el original.
Así vamos haciendo por cada página y al final escribimos el contenido del stream en el archivo de salida.
Si ejecutamos el código se verá algo así:
El resultado es este:
Sencillo pero muy útil. Tal vez más tarde podríamos agregar una interfaz gráfica para facilitar el uso de este programa. Incluso podríamos empaquetar esto.
Conclusión
Te recomiendo leer la documentación oficial de ReportLab aquí, así como la de PyPDF2 aquí. Igualmente te invito a leer otros tutoriales de Python.
Estimado, tu código me parece muy interesante, me puedes comentar como hago para agregar ademas del pie de página el numero de la página.
Hola. Gracias por sus comentarios. Si tiene alguna consulta, solicitud de creación de un programa o solicitud de cambio de software estoy para servirle en https://parzibyte.me/#contacto
Saludos!
Me puedes explicar con manzanas porfavor
donde escribo o copio la ubicación del archivo pdf en el pc?
o tiene que estar en la misma carpeta?
Hola. Puede ser la ruta absoluta o relativa. Si el PDF está en el mismo directorio que el script, basta con escribir el nombre completo incluyendo la extensión.
Si el PDF está en otra ubicación entonces su ruta podría ser (podría ser; solo es un ejemplo) algo como C:\\su_usuario\\Documents\\documento.pdf
Saludos