es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PyPDF2 encuentra las coordenadas de los objetos.

¿Hay alguna manera de encontrar las coordenadas en Python de objetos en un PDF?
Quiero cortar el PDF exactamente encima del objeto más alto y debajo del objeto más bajo:

de PyPDF2 importar PdfFileWriter, PdfFileReader

con open ("in.pdf", "rb") como in_f:
input1 = PdfFileReader(in_f)
salida = PdfFileWriter()

numPages = input1.getNumPages()
print ("documento tiene %s páginas." % numPages)

para i en rango(numPages):
    página = input1.getPage(i)
    print (page.cropBox.getLowerLeft())
    print (page.cropBox.getUpperRight())
    page.cropBox.setLowerLeft((0, 500))
    page.cropBox.setUpperRight((595.275, 841.889))
    salida.addPage(page)

con open ("out.pdf", "wb") como out_f:
    salida.write(out_f)

Entonces el código ahora corta algo, ¡pero sí, cómo encuentro exactamente dónde cortar! ¿Hay algún método?

Editar:

@BhavyaParikh.

Quiero un algoritmo que encuentre las coordenadas Y del punto más alto y del punto más bajo de cualquier objeto dado en la página del PDF. y luego corta en estos puntos en lugar de los valores codificados ” (0, 500) y (595.275, 841,889) “. Así que por ejemplo: ” (x1, y1) y (x2, y2). Pero no sé cómo encontrar estas coordenadas.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de encontrar las coordenadas de los objetos más altos y los más bajos en un PDF usando Python es utilizando la biblioteca PyPDF2.

    1. Primero, importa las bibliotecas necesarias:
    from PyPDF2 import PdfFileReader
    import operator
    
    1. A continuación, abre el archivo PDF y obtén el número de páginas:
    pdf = PdfFileReader(open('ruta/al/pdf', 'rb'))
    num_pages = pdf.getNumPages()
    
    1. Luego, recorre cada página y obtén las coordenadas de cada objeto utilizando el método getObject():
    coordinates = []
    for page_num in range(num_pages):
        page = pdf.getPage(page_num)
        page_obj = page.getObject()
        for obj_num in page_obj:
            obj = page_obj[obj_num]
            if obj['/Type'] == '/Annot':  # solo obtener anotaciones, puede cambiar esto por cualquier tipo de objeto que desee obtener
                lower_left = obj['/Rect'][0]
                upper_right = obj['/Rect'][3]
                coordinates.append((lower_left, upper_right))
    
    1. Una vez que tengas todas las coordenadas, puedes encontrar las coordenadas y más bajas de y utilizando las funciones max() y min():
    top_y = max(coordinates, key=operator.itemgetter(1))[1]
    bottom_y = min(coordinates, key=operator.itemgetter(0))[0]
    
    1. Ahora puedes usar estas coordenadas de y para recortar el PDF utilizando el atributo cropBox:
    for page_num in range(num_pages):
        page = pdf.getPage(page_num)
        page.cropBox.setUpperRight((page.cropBox.getUpperRight()[0], top_y))
        page.cropBox.setLowerLeft((page.cropBox.getLowerLeft()[0], bottom_y))
    

    Esto recortará el PDF por encima del objeto más alto y por debajo del objeto más bajo. Tenga en cuenta que este método solo funciona para PDF con anotaciones u otros objetos que tengan un atributo Rect.

Comments are closed.