Extracción basada en regiones usando Python

Extraer texto de una región específica de una página

Usar TextAbsorber junto con un Rectángulo para limitar la extracción a un área específica de una página. Este enfoque es útil para la extracción por zonas de encabezados, pies de página, celdas de tabla, campos de formulario, facturas u otras regiones de diseño fijo donde la posición del texto se conoce de antemano.

  1. Abra el PDF de origen como un Documento.
  2. Crear un TextAbsorber instancia.
  3. Configurar text_search_options para limitar la extracción a un rectángulo.
  4. Acepta el absorber en la página objetivo.
  5. Escribe el texto extraído en un archivo de salida.
import aspose.pdf as ap


def extract_text_from_region(infile, page_number, rect_coords, outfile):
    """
    Extract text from a specified rectangular region on a given page.
    Args:
        infile (str): Path to input PDF file.
        page_number (int): 1-based index of the page.
        rect_coords (tuple): (llx, lly, urx, ury) coordinates of the rectangle.
        outfile (str): Output text file path.
    """
    document = ap.Document(infile)
    try:
        absorber = ap.text.TextAbsorber()
        # Set options to restrict search to the rectangle
        absorber.text_search_options.limit_to_page_bounds = True
        llx, lly, urx, ury = rect_coords
        absorber.text_search_options.rectangle = ap.Rectangle(llx, lly, urx, ury, True)
        # Accept on the specific page
        document.pages[page_number].accept(absorber)
        extracted_text = absorber.text
        with open(outfile, "w", encoding="utf-8") as tw:
            tw.write(extracted_text)
    finally:
        document.close()

Extraer párrafos iterando a través de ellos

Usar ParagraphAbsorber cuando necesitas extracción consciente de párrafos en lugar de texto plano de página. A diferencia de TextAbsorber o TextFragmentAbsorber, esta API organiza la salida por página, sección y párrafo, lo que es útil para el análisis de texto, la exportación estructurada y el procesamiento sensible al diseño.

  1. Abra el PDF de origen como un Documento.
  2. Crear un ParagraphAbsorber instancia.
  3. Llamar absorber.visit(document) para analizar todas las páginas.
  4. Iterar a través de page_markups, luego a través de cada sección y párrafo.
  5. Leer los fragmentos de texto de cada párrafo y escribir el resultado en un archivo.
import aspose.pdf as ap


def extract_paragraphs_from_pdf(infile, outfile):
    """
    Extract all paragraphs from a PDF document, and write each paragraph’s text into an output file.
    Args:
        infile (str): Path to input PDF file.
        outfile (str): Path to output text file.
    """
    document = ap.Document(infile)
    try:
        absorber = ap.text.ParagraphAbsorber()
        absorber.visit(document)

        with open(outfile, "w", encoding="utf-8") as tw:
            for page_markup in absorber.page_markups:
                for sec_idx, section in enumerate(page_markup.sections, start=1):
                    for para_idx, paragraph in enumerate(section.paragraphs, start=1):
                        # Concatenate all fragments/lines in the paragraph
                        parts = []
                        for line in paragraph.lines:
                            for fragment in line:
                                parts.append(fragment.text)
                            parts.append("\r\n")
                        paragraph_text = "".join(parts)
                        tw.write(
                            f"Page {page_markup.number}, Section {sec_idx}, Paragraph {para_idx}:\n"
                        )
                        tw.write(paragraph_text + "\n")
    finally:
        document.close()

Extraer párrafos con renderizado de polígono delimitador

También puede usar ParagraphAbsorber para inspeccionar la geometría de los párrafos. Además de extraer texto, este enfoque registra el rectángulo de cada sección y el polígono del párrafo, lo cual es útil para el mapeo de diseño, el análisis de documentos, herramientas de accesibilidad o el post-procesamiento dependiente de regiones.

  1. Abra el PDF de origen como un Documento.
  2. Crear un ParagraphAbsorber instancia.
  3. Visita la página objetivo.
  4. Leer el marcado de la página desde absorber.page_markups.
  5. Itera a través de secciones y párrafos para capturar la geometría y el texto.
  6. Escribe los datos de rectángulo, polígono y texto en el archivo de salida.
import aspose.pdf as ap


def extract_paragraphs_with_geometry(infile, outfile):
    """
    Extract paragraphs and record geometry info (rectangle / polygon) for each paragraph in a PDF.
    Args:
        infile (str): Path to input PDF file.
        outfile (str): Path to output text file.
    """
    document = ap.Document(infile)
    try:
        absorber = ap.text.ParagraphAbsorber()
        absorber.visit(document.pages[1])  # Visit page 2 (pages are 1-indexed)

        page_markup = absorber.page_markups[0]
        with open(outfile, "w", encoding="utf-8") as tw:
            for sec_idx, section in enumerate(page_markup.sections, start=1):
                tw.write(f"Section {sec_idx}: rectangle = {section.rectangle}\n")
                for para_idx, paragraph in enumerate(section.paragraphs, start=1):
                    tw.write(f"  Paragraph {para_idx}: polygon = {paragraph.points}\n")
                    # Concatenate paragraph text
                    parts = []
                    for line in paragraph.lines:
                        for fragment in line:
                            parts.append(fragment.text)
                        parts.append("\r\n")
                    tw.write("    Text: " + "".join(parts) + "\n\n")
    finally:
        document.close()