Trabajar con gráficos vectoriales en Python
Aspose.PDF for Python via .NET provee el GraphicsAbsorber clase para acceder y manipular gráficos vectoriales ya presentes en una página PDF. Llámala visit método en cualquier página para extraer rutas, formas y otros operadores gráficos, luego mover, eliminar o copiar esos elementos según sea necesario.
Utilice esta página cuando necesite inspeccionar o modificar los elementos de dibujo vectorial incrustados en un PDF existente, en lugar de dibujar nuevas formas desde cero.
Extrayendo gráficos
La extracción es el punto de partida para todas las tareas de gráficos vectoriales. GraphicsAbsorber lee la secuencia de contenido de una página y expone cada elemento gráfico con su referencia de página, posición y operadores sin procesar.
- Abra el documento PDF.
- Cree un GraphicsAbsorber instancia.
- Llamada
visiten la página de destino para rellenarelements. - Iterar sobre
elementspara inspeccionar la posición y los recuentos de operadores.
import aspose.pdf as ap
import sys
from os import path
def using_graphics_absorber(infile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
graphics_absorber.visit(page)
for element in graphics_absorber.elements:
print(f"Page Number: {element.source_page.number}")
print(f"Position: ({element.position.x}, {element.position.y})")
print(f"Number of Operators: {element.operators.length}")
GraphicsAbsorber es parte de aspose.pdf.vector namespace y está específicamente diseñado para interactuar con gráficos vectoriales en flujos de contenido PDF.
Gráficos en movimiento
Después de la extracción, establezca un nuevo position en cada elemento para reubicarlo en la misma página. Envuelva las actualizaciones en suppress_update / resume_update llamadas para agrupar escrituras de flujo de contenido en una sola operación y evitar repintados redundantes.
- Abra el documento PDF.
- Cree un
GraphicsAbsorbery llamarvisiten la página de destino. - Llamada
suppress_updatepara pausar escrituras del flujo de contenido. - Actualizar el
positionde cada elemento. - Llamada
resume_updatepara confirmar todos los cambios de una vez. - Guarda el documento modificado.
import aspose.pdf as ap
import sys
from os import path
def move_graphics(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
graphics_absorber.visit(page)
graphics_absorber.suppress_update()
for element in graphics_absorber.elements:
position = element.position
element.position = ap.Point(position.x + 150, position.y - 10)
graphics_absorber.resume_update()
document.save(outfile)
Eliminando gráficos
Para eliminar elementos vectoriales específicos de una página, filtre por posición o rectángulo delimitador y luego elimínelos. Aspose.PDF for Python ofrece dos enfoques dependiendo de si desea eliminar los elementos en línea o recopilarlos primero.
Método 1: Eliminar en línea usando límite rectangular
Este enfoque verifica la posición de cada elemento contra un rectángulo y llama element.remove() directamente dentro del bucle. Utilízalo cuando quieras un código conciso y no necesites inspeccionar el conjunto eliminado después.
- Abra el documento PDF.
- Cree un
GraphicsAbsorbery llamarvisiten la página de destino. - Definir el objetivo Rectángulo.
- Llamada
suppress_updatepara pausar escrituras del flujo de contenido. - Iterar
elements, llamandoremove()en cada elemento cuya posición caiga dentro del rectángulo. - Llamada
resume_updateconfirmar las eliminaciones. - Guarda el documento modificado.
import aspose.pdf as ap
import sys
from os import path
def remove_graphics_method_1(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
graphics_absorber.visit(page)
rectangle = ap.Rectangle(70, 248, 170, 252, True)
graphics_absorber.suppress_update()
for element in graphics_absorber.elements:
if rectangle.contains(element.position, False):
element.remove()
graphics_absorber.resume_update()
document.save(outfile)
Método 2: Recopilar elementos primero, luego eliminar
Este enfoque reúne los elementos coincidentes en un GraphicElementCollection y pasa la colección a page.delete_graphics. Úsalo cuando necesites revisar o registrar lo que se eliminará antes de confirmar la eliminación.
- Abra el documento PDF.
- Cree un
GraphicsAbsorbery llamarvisiten la página de destino. - Define el rectángulo de destino.
- Iterar
elementsy agrega elementos coincidentes a unaGraphicElementCollection. - Llamada
page.contents.suppress_updatepara pausar escrituras del flujo de contenido. - Llamada
page.delete_graphicscon la colección. - Llamada
page.contents.resume_updateconfirmar las eliminaciones. - Guarda el documento modificado.
import aspose.pdf as ap
import sys
from os import path
def remove_graphics_method_2(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
rectangle = ap.Rectangle(70, 248, 170, 252, True)
graphics_absorber.visit(page)
removed_elements_collection = ap.vector.GraphicElementCollection()
for element in graphics_absorber.elements:
if rectangle.contains(element.position, False):
removed_elements_collection.add(element)
page.contents.suppress_update()
page.delete_graphics(removed_elements_collection)
page.contents.resume_update()
document.save(outfile)
Agregar gráficos a otra página
Los elementos vectoriales extraídos de una página pueden colocarse en cualquier otra página del mismo documento. Hay dos métodos disponibles: agregar los elementos uno por uno, o pasar toda la colección en una única llamada.
Método 1: Añadir elementos individualmente
Utilice este método cuando necesite control por elemento, como filtrar o transformar elementos individuales antes de colocarlos en la página de destino.
- Abra el documento PDF.
- Cree un
GraphicsAbsorbery llamarvisiten la página de origen. - Agregar una nueva página de destino al documento.
- Llamada
page_2.contents.suppress_updatepara pausar escrituras del flujo de contenido. - Llamada
element.add_on_page(page_2)para cada elemento. - Llamada
page_2.contents.resume_updatepara confirmar todas las adiciones. - Guarda el documento modificado.
import aspose.pdf as ap
import sys
from os import path
def add_to_another_page_method_1(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page_1 = document.pages[1]
page_2 = document.pages.add()
graphics_absorber.visit(page_1)
page_2.contents.suppress_update()
for element in graphics_absorber.elements:
element.add_on_page(page_2)
page_2.contents.resume_update()
document.save(outfile)
Método 2: Añadir toda la colección de una vez
Utiliza este método cuando quieras copiar todos los elementos extraídos a una página en una sola operación sin iterar manualmente.
- Abra el documento PDF.
- Cree un
GraphicsAbsorbery llamarvisiten la página de origen. - Agregar una nueva página de destino al documento.
- Llamada
page_2.contents.suppress_updatepara pausar escrituras del flujo de contenido. - Llamada
page_2.add_graphicscon el completoelementscolección. - Llamada
page_2.contents.resume_updatepara confirmar todas las adiciones. - Guarda el documento modificado.
import aspose.pdf as ap
import sys
from os import path
def add_to_another_page_method_2(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page_1 = document.pages[1]
page_2 = document.pages.add()
graphics_absorber.visit(page_1)
page_2.contents.suppress_update()
page_2.add_graphics(graphics_absorber.elements, None)
page_2.contents.resume_update()
document.save(outfile)