Extraer datos vectoriales de un archivo PDF usando Python

Acceder a datos vectoriales de un documento PDF

Usar GraphicsAbsorber para inspeccionar elementos gráficos vectoriales en una página de un Documento. Después de visitar la página objetivo, itere a través de los elementos extraídos para examinar propiedades como los límites rectangulares, posiciones y operadores de dibujo.

  1. Abra el PDF de origen como un Document.
  2. Crear un GraphicsAbsorber instancia.
  3. Llamar gr_absorber.visit(page) en la página de destino.
  4. Leer los elementos extraídos de gr_absorber.elements.
  5. Itere a través de los elementos y escriba sus propiedades en un archivo de salida.
import aspose.pdf as ap


def extract_graphics_elements(infile, outfile):
    """
    Extract vector graphic elements from a specified page of a PDF and log basic element properties.
    Args:
        infile (str): Path to input PDF file.
        outfile (str): Path to output text file for logging element info.
    """
    document = ap.Document(infile)
    try:
        gr_absorber = ap.vector.GraphicsAbsorber()
        # Visit page 2 (pages collection is 1-indexed; document.pages[1] is the second page)
        gr_absorber.visit(document.pages[1])

        elements = gr_absorber.elements
        with open(outfile, "w", encoding="utf-8") as f:
            for idx, elem in enumerate(elements, start=1):
                # Basic properties
                rect = elem.rectangle
                pos = elem.position
                ops_count = len(elem.operators)
                f.write(
                    f"Element {idx}: Rectangle = {rect}, Position = {pos}, Operators = {ops_count}\n"
                )
    finally:
        document.close()

Guardar gráficos vectoriales de una página en un archivo SVG

Exportar gráficos vectoriales de una página PDF a SVG para preservar rutas y formas escalables fuera del PDF original. Este método es útil para reutilizar arte vectorial en flujos de trabajo web, de diseño o de publicación.

  1. Cargar el documento PDF.
  2. Acceda a la página objetivo.
  3. Llamar page.try_save_vector_graphics() para exportar las rutas vectoriales de la página a SVG.
  4. Cierre el documento.
import aspose.pdf as ap


def save_vector_graphics_to_svg(infile, svg_outfile):
    """
    Save vector graphics from a specified page of a PDF document into an SVG file.
    Args:
        infile (str): Path to input PDF file.
        svg_outfile (str): Path to output SVG file.
    """
    document = ap.Document(infile)
    try:
        page = document.pages[1]
        # Try to save vector graphics into SVG
        page.try_save_vector_graphics(svg_outfile)
    finally:
        document.close()

Extraer cada subruta a un SVG separado

Cuando una página contiene múltiples rutas vectoriales independientes, use SvgExtractionOptions con SvgExtractor para escribir cada subruta en un archivo SVG separado.

  1. Cargue el PDF.
  2. Crear SvgExtractionOptions y establecer extract_every_subpath_to_svg.
  3. Accede a la primera página del documento.
  4. Instanciar SvgExtractor con las opciones.
  5. Llamar extractor.extract() escribir archivos SVG separados para cada subruta vectorial.
  6. Cierre el documento.
import aspose.pdf as ap


def extract_subpaths_to_svgs(infile, output_dir):
    """
    Extract each vector sub-path on a PDF page into separate SVG files using extraction options.
    Args:
        infile (str): Input PDF file path.
        output_dir (str): Directory path where SVG files will be saved.
    """
    document = ap.Document(infile)
    try:
        options = ap.vector.SvgExtractionOptions()
        options.extract_every_subpath_to_svg = True

        page = document.pages[1]
        extractor = ap.vector.SvgExtractor(options)
        extractor.extract(page, output_dir)
    finally:
        document.close()

Extraer una lista de elementos a una sola imagen

Extraer varios elementos vectoriales de una página PDF y guardarlos como una única imagen SVG combinada. Esto es útil cuando deseas preservar la relación visual entre formas agrupadas, diagramas o fragmentos de dibujo.

  1. Abra el PDF usando Documento.
  2. Seleccione una página y prepare una lista de elementos vectoriales.
  3. Usar SvgExtractor para combinar esos elementos en un solo SVG.
  4. Guarde el archivo de salida.
import aspose.pdf as ap


def extract_list_of_elements_to_single_image(infile, outfile):
    """
    Extracts multiple vector graphic elements from a PDF page and saves them as a single SVG image.
    Args:
        infile (str): Path to the input PDF file.
        outfile (str): Path to the output SVG file.
    """
    document = ap.Document(infile)
    try:
        page = document.pages[1]
        svg_extractor = ap.vector.SvgExtractor()
        elements = []  # Fill this list with specific graphic elements as needed
        svg_extractor.extract(elements, page, outfile)
    finally:
        document.close()

Extraer un solo elemento

Extrae un elemento vectorial específico de un PDF y guárdalo como un archivo SVG individual. Esto es útil para aislar logotipos, íconos o formas independientes de páginas vectoriales más complejas.

  1. Crear un GraphicsAbsorber para capturar datos vectoriales.
  2. Visite una página específica para recopilar sus elementos vectoriales.
  3. Seleccione un elemento objetivo, como un XFormPlacement.
  4. Guarda ese único elemento en un archivo SVG.
import aspose.pdf as ap


def extract_single_vector_element(infile, outfile):
    """
    Extracts a specific vector graphic element (e.g., an XFormPlacement) from a PDF page and saves it as an SVG file.
    Args:
        infile (str): Path to the input PDF file.
        outfile (str): Path to the output SVG file.
    """
    document = ap.Document(infile)
    try:
        graphics_absorber = ap.vector.GraphicsAbsorber()
        page = document.pages[1]
        graphics_absorber.visit(page)
        xform_placement = graphics_absorber.elements[1]
        if isinstance(xform_placement, ap.vector.XFormPlacement):
            xform_placement.elements[2].save_to_svg(outfile)
    finally:
        document.close()