Trabajar con archivos PDF en Python: insertar, eliminar y reordenar páginas

T

Este artículo es el tercero de una serie sobre cómo trabajar con archivos PDF en Python:

  • Leer y dividir páginas
  • Agregar imágenes y marcas de agua
  • Insertar, eliminar y reordenar páginas (está aquí)

Introducción

Este artículo es la tercera parte de una pequeña serie sobre cómo trabajar con archivos PDF en Python. En los artículos anteriores, dimos una introducción a la lectura de documentos PDF usando Python. Hasta ahora, ha aprendido a manipular archivos PDF existentes y a leer y extraer el contenido, tanto texto como imágenes. Además, hemos discutido la división de documentos en sus páginas individuales, así como la adición de marcas de agua y códigos de barras.

Ahora, en este artículo, daremos un paso más y demostraremos cómo reorganizar un documento PDF de diferentes maneras.

  • Eliminar páginas con pdfrw
  • Eliminar páginas con PyMuPDF
  • Insertar páginas con PyMuPDF
  • División de páginas pares e impares con PyPDF2

Eliminar páginas con pdfrw

Eliminar páginas individuales de un archivo PDF es tan simple como lo siguiente:

  • Leer un PDF como archivo de entrada
  • Escribe las páginas seleccionadas en un nuevo PDF como archivo de salida

El siguiente ejemplo elimina las dos primeras páginas de un documento PDF. Utilizando la pdfrw biblioteca, el archivo se lee con la ayuda del PdfReader() primera clase. Excepto por la primera y la segunda página, cada página se agrega al archivo de salida usando el addpage() método, y luego se escribe en el disco eventualmente.

La Figura 1 muestra el resultado al ejecutar el código en un archivo PDF de cuatro páginas.

# !/usr/bin/python
# Remove the first two pages (cover sheet) from the PDF

from pdfrw import PdfReader, PdfWriter

input_file = "example.pdf"
output_file = "example-updated.pdf"

# Define the reader and writer objects
reader_input = PdfReader(input_file)
writer_output = PdfWriter()

# Go through the pages one after the next
for current_page in range(len(reader_input.pages)):
    if current_page > 1:
        writer_output.addpage(reader_input.pages[current_page])
        print("adding page %i" % (current_page + 1))

# Write the modified content to disk
writer_output.write(output_file)

Eliminar páginas con PyMuPDF

los PyMuPDF Library viene con bastantes métodos sofisticados que simplifican la eliminación de páginas de un archivo PDF. Le permite especificar una sola página (utilizando el deletePage() método), o un rango de números de página (usando el deletePageRange() método), o una lista con los números de página (utilizando el select() método).

El siguiente ejemplo demostrará cómo utilizar una lista para seleccionar las páginas que se conservarán del documento original. Tenga en cuenta que las páginas que no se especifican no formarán parte del documento de salida. En nuestro caso, el documento de salida contiene solo la primera, segunda y cuarta página.

# !/usr/bin/python

# Recall that PyMuPDF is imported as fitz
import fitz

input_file = "example.pdf"
output_file = "example-rearranged.pdf"

# Define the pages to keep - 1, 2 and 4
file_handle = fitz.open(input_file)
pages_list = [0,1,3]

# Select the pages and save the output
file_handle.select(pages_list)
file_handle.save(output_file)

Insertar páginas con PyMuPDF

La biblioteca PyMuPDF también le permite insertar páginas. Proporciona los métodos newPage() para agregar páginas completamente en blanco, y insertPage() para agregar una página existente. El siguiente ejemplo muestra cómo agregar una página de un documento PDF diferente al final de otro.

# !/usr/bin/python

# Recall that PyMuPDF is imported as fitz
import fitz

original_pdf_path = "example.pdf"
extra_page_path = "extra-page.pdf"
output_file_path = "example-extended.pdf"

original_pdf = fitz.open(original_pdf_path)
extra_page = fitz.open(extra_page_path)

original_pdf.insertPDF(extra_page)
original_pdf.save(output_file_path)

División de páginas pares e impares con PyPDF2

El siguiente ejemplo usa PyPDF2 y lo hace tomando un archivo, separándolo en sus páginas pares e impares, guardando las páginas pares en el archivo even.pdfy las páginas impares en odd.pdf.

Esta secuencia de comandos de Python comienza con la definición de dos archivos de salida, even.pdf y odd.pdf, así como sus correspondientes objetos de escritor pdf_writer_even y pdf_writer_odd. A continuación, en un bucle for, el script recorre todo el archivo PDF y lee una página tras otra. Las páginas con números de página pares se agregan a la secuencia. pdf_writer_even utilizando addPage(), y se agregan números impares a la secuencia pdf_writer_odd. Al final, las dos secuencias se guardan en el disco en archivos separados, como se definió anteriormente.

#!/usr/bin/python3

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_document = "example.pdf"
pdf = PdfFileReader(pdf_document)

# Output files for new PDFs
output_filename_even = "even.pdf"
output_filename_odd = "odd.pdf"

pdf_writer_even = PdfFileWriter()
pdf_writer_odd = PdfFileWriter()

# Get reach page and add it to corresponding
# output file based on page number
for page in range(pdf.getNumPages()):
    current_page = pdf.getPage(page)
    if page % 2 == 0:
        pdf_writer_odd.addPage(current_page)
    else:
        pdf_writer_even.addPage(current_page)

# Write the data to disk
with open(output_filename_even, "wb") as out:
     pdf_writer_even.write(out)
     print("created", output_filename_even)

# Write the data to disk
with open(output_filename_odd, "wb") as out:
     pdf_writer_odd.write(out)
     print("created", output_filename_odd)

Conclusión

Reescribir y reorganizar la estructura de un PDF es bastante fácil con las bibliotecas pdfrw, PyMuPDF y PyPDF2. Con solo unas pocas líneas de código Python, puede eliminar páginas, separarlas y agregar contenido nuevo.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad