Travailler avec les graphiques vectoriels en Python
Aspose.PDF for Python via .NET fournit le GraphicsAbsorber classe pour accéder et manipuler les graphiques vectoriels déjà présents dans une page PDF. Appelez la visit méthode sur n’importe quelle page pour extraire les chemins, les formes et d’autres opérateurs graphiques, puis déplacer, supprimer ou copier ces éléments selon les besoins.
Utilisez cette page lorsque vous devez inspecter ou modifier des éléments de dessin vectoriel intégrés dans un PDF existant, plutôt que de dessiner de nouvelles formes à partir de zéro.
Extraction de graphiques
L’extraction est le point de départ de toutes les tâches de graphisme vectoriel. GraphicsAbsorber lit le flux de contenu d’une page et expose chaque élément graphique avec sa référence de page, sa position et ses opérateurs bruts.
- Ouvrez le document PDF.
- Créer un GraphicsAbsorber instance.
- Appel
visitsur la page cible à remplirelements. - Itérer sur
elementspour inspecter la position et le nombre d’opérateurs.
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 fait partie du aspose.pdf.vector namespace et est spécialement conçu pour interagir avec les graphiques vectoriels dans les flux de contenu PDF.
Graphiques animés
Après extraction, définissez un nouveau position sur chaque élément pour le repositionner sur la même page. Enveloppez les mises à jour dans suppress_update / resume_update appels pour regrouper les écritures du flux de contenu en une seule opération et éviter les rafraîchissements redondants.
- Ouvrez le document PDF.
- Créer un
GraphicsAbsorberet appelervisitsur la page cible. - Appel
suppress_updatemettre en pause les écritures du flux de contenu. - Mettre à jour le
positionde chaque élément. - Appel
resume_updatepour valider tous les changements en une seule fois. - Enregistrez le document modifié.
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)
Suppression des graphiques
Pour supprimer des éléments vectoriels spécifiques d’une page, filtrez par position ou rectangle englobant, puis supprimez-les. Aspose.PDF for Python propose deux approches selon que vous souhaitiez supprimer les éléments en ligne ou les collecter d’abord.
Méthode 1 : suppression en ligne à l’aide de la bordure du rectangle
Cette approche vérifie la position de chaque élément par rapport à un rectangle et appelle element.remove() directement à l’intérieur de la boucle. Utilisez-le lorsque vous souhaitez un code concis et que vous n’avez pas besoin d’examiner l’ensemble des éléments supprimés par la suite.
- Ouvrez le document PDF.
- Créer un
GraphicsAbsorberet appelervisitsur la page cible. - Définir la cible Rectangle.
- Appel
suppress_updatemettre en pause les écritures du flux de contenu. - Itérer
elements, appelantremove()sur chaque élément dont la position se trouve à l’intérieur du rectangle. - Appel
resume_updatepour valider les suppressions. - Enregistrez le document modifié.
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éthode 2 : Collecter les éléments d’abord, puis les supprimer
Cette approche rassemble les éléments correspondants dans un GraphicElementCollection et transmet la collection à page.delete_graphics. Utilisez-le lorsque vous devez examiner ou consigner ce qui sera supprimé avant de valider la suppression.
- Ouvrez le document PDF.
- Créer un
GraphicsAbsorberet appelervisitsur la page cible. - Définissez le rectangle cible.
- Itérer
elementset ajouter des éléments correspondants à unGraphicElementCollection. - Appel
page.contents.suppress_updatemettre en pause les écritures du flux de contenu. - Appel
page.delete_graphicsavec la collection. - Appel
page.contents.resume_updatepour valider les suppressions. - Enregistrez le document modifié.
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)
Ajout de graphiques à une autre page
Les éléments vectoriels extraits d’une page peuvent être placés sur n’importe quelle autre page du même document. Deux méthodes sont disponibles : ajouter les éléments un par un, ou transmettre l’ensemble complet en un seul appel.
Méthode 1 : ajouter les éléments individuellement
Utilisez cette méthode lorsque vous avez besoin d’un contrôle élément par élément, comme le filtrage ou la transformation d’éléments individuels avant de les placer sur la page de destination.
- Ouvrez le document PDF.
- Créer un
GraphicsAbsorberet appelervisitsur la page source. - Ajoutez une nouvelle page de destination au document.
- Appel
page_2.contents.suppress_updatemettre en pause les écritures du flux de contenu. - Appel
element.add_on_page(page_2)pour chaque élément. - Appel
page_2.contents.resume_updatepour valider toutes les ajouts. - Enregistrez le document modifié.
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éthode 2 : Ajouter toute la collection en une fois
Utilisez cette méthode lorsque vous souhaitez copier tous les éléments extraits vers une page en une seule opération, sans itérer manuellement.
- Ouvrez le document PDF.
- Créer un
GraphicsAbsorberet appelervisitsur la page source. - Ajoutez une nouvelle page de destination au document.
- Appel
page_2.contents.suppress_updatemettre en pause les écritures du flux de contenu. - Appel
page_2.add_graphicsavec le completelementscollection. - Appel
page_2.contents.resume_updatepour valider toutes les ajouts. - Enregistrez le document modifié.
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)