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.