Cómo dividir un PDF en Python en varias páginas con PyPDF2

Dividir un PDF en Python en varias páginas con PyPDF2

Python es un lenguaje muy versátil que nos permite automatizar infinidad de tareas. En este tutorial te voy a mostrar cómo dividir un PDF en Python en varias páginas gracias a la librería PyPDF2.

Qué es PyPDF2

PyPDF2 es una librería para manejo de PDFs que, entre otras cosas, nos brinda las siguientes funcionalidades:

  • Extraer información de un documento (título, autor, …).
  • Dividir documentos por páginas.
  • Fusionar varios documentos en uno solo.
  • Recortar páginas de un documento.
  • Fusionar múltiples páginas en una sola.
  • Cifrar y descifrar archivos PDF.

Instalar PyPDF2

Lo primero que debes hacer para usar PyPDF2 es instalarla, ya que es una librería de terceros. Así que crea un entorno virtual, actívalo y ejecuta el siguiente comando:

$> pip install PyPDF2

Obtener una página de un documento PDF

A continuación, te voy a mostrar cómo extraer una página de un PDF en un nuevo documento usando esta librería. Para ello, he definido una función llamada extract_page(doc_name, page_num). El parámetro doc_name es la ruta completa del documento. Si el documento se encuentra en la misma ruta que el programa Python, basta con indicar el nombre. Por su parte, el parámetro page_num es el número de página a extraer (cuidado porque la primera página comienza por el índice 0):

from PyPDF2 import PdfFileWriter, PdfFileReader


def extract_page(doc_name, page_num):
    pdf_reader = PdfFileReader(open(doc_name, 'rb'))

    pdf_writer = PdfFileWriter()
    pdf_writer.addPage(pdf_reader.getPage(page_num))
    with open(f'document-page{page_num}.pdf', 'wb') as doc_file:
        pdf_writer.write(doc_file)

Dividir un PDF en Python a partir de un número de página

En este apartado veremos una nueva función que permite dividir un PDF en Python en dos a partir de un número de página. La función la he llamado split_pdf(doc_name, page_num). Al igual que la anterior, el parámetro doc_name es la ruta o el nombre del documento. page_num indica el número de página que se utilizará para dividir el documento en dos (la primera página comienza por el índice 0):

def split_pdf(doc_name, page_num):
    pdf_reader = PdfFileReader(open(doc_name, "rb"))
    pdf_writer1 = PdfFileWriter()
    pdf_writer2 = PdfFileWriter()

    for page in range(page_num):
        pdf_writer1.addPage(pdf_reader.getPage(page))

    for page in range(page_num, pdf_reader.getNumPages()):
        pdf_writer2.addPage(pdf_reader.getPage(page))

    with open("doc1.pdf", 'wb') as file1:
        pdf_writer1.write(file1)

    with open("doc2.pdf", 'wb') as file2:
        pdf_writer2.write(file2)

Como resultado, la función genera dos documentos llamados doc1.pdf y doc2.pdf. La puedes optimizar a tu gusto, por ejemplo, para indicar los nombres de los documentos resultantes o para hacer más divisiones.

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento