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

Este artículo es el tercero de una serie sobre el trabajo con archivos PDF en Python:
  • Leer y dividir páginas
  • Añadiendo imágenes y marcas de agua
  • Inserción, eliminación y reordenamiento de 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 utilizando Python. Hasta ahora, ha aprendido cómo manipular los archivos PDF existentes y cómo leer y extraer el contenido, tanto de texto como de 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, iremos un paso más allá y demostraremos cómo reorganizar un documento PDF de diferentes maneras.
  • Borrando Páginas con pdfrw
  • Eliminando Páginas con PyMuPDF
  • Insertando Páginas con PyMuPDF
  • División de páginas pares e impares con PyPDF2

Borrando Páginas con pdfrw

Eliminar páginas individuales de un archivo PDF es tan simple como lo siguiente:
  • Lee un PDF como un archivo de entrada
  • Escribir las páginas seleccionadas en un nuevo PDF como un archivo de salida
El siguiente ejemplo elimina las dos primeras páginas de un documento PDF. Usando la biblioteca pdfrw , el archivo se lee con la ayuda de la PdfReader()clase primero. Con la excepción de 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 con el tiempo.
La Figura 1 muestra el resultado cuando se ejecuta 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 las dos primeras páginas de un PDF

Eliminando Páginas con PyMuPDF

La biblioteca PyMuPDF viene con varios métodos sofisticados que simplifican la eliminación de páginas de un archivo PDF. Le permite especificar una sola página (usando el deletePage()método), un rango de números de páginas (usando el deletePageRange()método) o una lista con los números de páginas (usando el select()método).
El siguiente ejemplo mostrará cómo usar una lista para seleccionar las páginas que se deben conservar del documento original. Tenga en cuenta que las páginas que no están especificadas no formarán parte del documento de salida. En nuestro caso, el documento de salida contiene las páginas primera, segunda y cuarta solamente.
# !/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)  

Insertando Páginas con PyMuPDF

La biblioteca PyMuPDF le permite insertar páginas también. 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 utiliza 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.
Este script de Python comienza con la definición de dos archivos de salida even.pdfodd.pdf, así como sus objetos de escritura correspondientes pdf_writer_evenpdf_writer_oddA 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_evenusando addPage(), y los números impares se agregan a la secuencia pdf_writer_oddAl 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

Volver a escribir 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.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.