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

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *