Extraire des données vectorielles à partir d'un fichier PDF à l'aide de Java
Accéder aux données vectorielles à partir d’un document PDF
Utilisez GraphicsAbsorber pour inspecter les éléments graphiques vectoriels sur une page et écrire leur géométrie de base dans un fichier texte.
-
Ouvrez le PDF source dans une instance
Document. -
Créez un
GraphicsAbsorberet visitez laPagecible pour collecter les opérations graphiques vectorielles. -
Parcourez les objets
GraphicElementextraits et lisez leurs collections de rectangles, de positions et d’opérateurs. -
Créez le texte de sortie avec les détails de la géométrie et du nombre d’opérateurs pour chaque élément.
-
Écrivez les données vectorielles extraites dans le fichier de sortie.
public static void extractGraphicsElements(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
StringBuilder text = new StringBuilder();
int index = 1;
for (GraphicElement element : absorber.getElements()) {
text.append("Element ").append(index)
.append(": Rectangle = ").append(element.getRectangle())
.append(", Position = ").append(element.getPosition())
.append(", Operators = ").append(element.getOperators().size())
.append("\n");
index++;
}
Files.writeString(outputFile, text.toString());
}
}
Enregistrer les graphiques vectoriels de la page au format SVG
-
Ouvrez le PDF source dans une instance
Document. -
Obtenez la page cible
Pagedu document. -
Appelez
page.trySaveVectorGraphics(outputFile.toString())pour exporter le contenu graphique vectoriel de cette page directement vers SVG.
public static void saveVectorGraphicsToSvg(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page = document.getPages().get_Item(1);
page.trySaveVectorGraphics(outputFile.toString());
}
}
Enregistrer chaque élément extrait dans un SVG distinct
-
Ouvrez le PDF source dans une instance
Document. -
Créez un
GraphicsAbsorberet visitez laPagecible. -
Créez le répertoire de sortie pour les sous-chemins extraits avant d’écrire des fichiers.
-
Parcourez les objets
GraphicElementextraits et appelezsaveToSvg(...)pour chaque élément. -
Enregistrez chaque élément extrait dans un fichier SVG distinct.
public static void extractSubpathsToSvgs(Path inputFile, Path outputDir) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
Path subpathsDir = outputDir.resolve("subpaths");
Files.createDirectories(subpathsDir);
int index = 1;
for (GraphicElement element : absorber.getElements()) {
element.saveToSvg(subpathsDir.resolve("subpath_" + index + ".svg").toString());
index++;
}
}
}
Combiner les éléments extraits en un seul SVG
-
Ouvrez le PDF source dans une instance
Document. -
Créez un
GraphicsAbsorberet visitez laPagecible. -
Créez la structure du document SVG qui contiendra les fragments vectoriels combinés.
-
Parcourez les objets
GraphicElementextraits et ajoutez chaque fragment SVG généré. -
Écrivez la sortie SVG combinée dans le fichier cible.
public static void extractListOfElementsToSingleImage(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
StringBuilder svg = new StringBuilder();
svg.append("<svg xmlns=\"http://www.w3.org/2000/svg\">\n");
for (GraphicElement element : absorber.getElements()) {
svg.append(element.saveToSvg()).append("\n");
}
svg.append("</svg>\n");
Files.writeString(outputFile, svg.toString());
}
}
Extraire un seul élément vectoriel
-
Ouvrez le PDF source dans une instance
Document. -
Créez un
GraphicsAbsorberet visitez laPagecible. -
Obtenez le
GraphicElementrequis à partir de la collection d’éléments extraits. -
Vérifiez si l’élément sélectionné est un
XFormPlacementet parcourez ses éléments imbriqués si nécessaire. -
Enregistrez l’élément vectoriel sélectionné dans le fichier SVG de sortie.
public static void extractSingleVectorElement(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
Page page = document.getPages().get_Item(1);
graphicsAbsorber.visit(page);
if (graphicsAbsorber.getElements().size() > 1) {
GraphicElement xformPlacement = graphicsAbsorber.getElements().get_Item(1);
if (xformPlacement instanceof XFormPlacement) {
XFormPlacement placement = (XFormPlacement) xformPlacement;
if (placement.getElements().size() > 2) {
placement.getElements().get_Item(2).saveToSvg(outputFile.toString());
}
} else {
xformPlacement.saveToSvg(outputFile.toString());
}
}
}
}