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 *