Trabajar con gráficos vectoriales en Java

Aspose.PDF for Java expone contenido vectorial a través de GraphicsAbsorber y GraphicElement objetos. Esto le permite inspeccionar los elementos vectoriales de bajo nivel en una página y luego actualizarlos, eliminarlos, copiarlos o exportarlos.

Inspeccionar gráficos vectoriales en una página

Utilice este ejemplo cuando necesite enumerar elementos vectoriales y inspeccionar su página, posición y recuento de operadores.

  1. Abra el PDF de origen Document.
  2. Cree un GraphicsAbsorber y visite la página de destino.
  3. Itere a través de lo absorbido GraphicElement objetos y muestre sus propiedades.
public static void usingGraphicsAbsorber(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
        try {
            Page page = document.getPages().get_Item(1);
            graphicsAbsorber.visit(page);
            for (GraphicElement element : graphicsAbsorber.getElements()) {
                System.out.println("Page Number: " + element.getSourcePage().getNumber());
                System.out.println("Position: (" + element.getPosition().getX() + ", "
                        + element.getPosition().getY() + ")");
                System.out.println("Number of Operators: " + element.getOperators().size());
            }
        } finally {
            graphicsAbsorber.dispose();
        }
    }
}

Mover gráficos vectoriales en la página

Use este ejemplo cuando todos los elementos vectoriales detectados deban desplazarse a una nueva posición.

  1. Abra el PDF de origen Document.
  2. Visite la página de destino con GraphicsAbsorber y suprima temporalmente las actualizaciones.
  3. Cambie la posición de cada elemento absorbido, reanude las actualizaciones y guarde el documento.
public static void moveGraphics(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
        try {
            Page page = document.getPages().get_Item(1);
            graphicsAbsorber.visit(page);
            graphicsAbsorber.suppressUpdate();
            for (GraphicElement element : graphicsAbsorber.getElements()) {
                Point position = element.getPosition();
                element.setPosition(new Point(position.getX() + 150, position.getY() - 10));
            }
            graphicsAbsorber.resumeUpdate();
        } finally {
            graphicsAbsorber.dispose();
        }
        document.save(outputFile.toString());
    }
    System.out.println("Vector graphics moved in " + outputFile);
}

Eliminar gráficos vectoriales por posición con eliminación de elementos

Utiliza este ejemplo cuando los elementos vectoriales dentro de un rectángulo específico deban eliminarse uno a uno.

  1. Abra el PDF de origen Document.
  2. Visite la página con GraphicsAbsorber y defina el objetivo Rectangle.
  3. Elimine los elementos coincidentes, reanuda las actualizaciones y guarde el documento.
public static void removeGraphicsMethod1(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
        try {
            Page page = document.getPages().get_Item(1);
            Rectangle rectangle = new Rectangle(70, 248, 170, 252, true);
            graphicsAbsorber.visit(page);
            graphicsAbsorber.suppressUpdate();
            for (GraphicElement element : graphicsAbsorber.getElements()) {
                if (rectangle.contains(element.getPosition(), false)) {
                    element.remove();
                }
            }
            graphicsAbsorber.resumeUpdate();
        } finally {
            graphicsAbsorber.dispose();
        }
        document.save(outputFile.toString());
    }
    System.out.println("Vector graphics removed with method 1 in " + outputFile);
}

Eliminar gráficos vectoriales eliminando una colección

Utilice este ejemplo cuando los elementos vectoriales coincidentes deban recopilarse primero y luego eliminarse en una sola operación de página.

  1. Abra el PDF de origen Document.
  2. Visite la página con GraphicsAbsorber y recopile los elementos coincidentes.
  3. Elimine los gráficos recopilados del contenido de la página y guarde el documento actualizado.
public static void removeGraphicsMethod2(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
        try {
            Page page = document.getPages().get_Item(1);
            Rectangle rectangle = new Rectangle(70, 248, 170, 252, true);
            graphicsAbsorber.visit(page);
            GraphicElementCollection removedElements = new GraphicElementCollection();
            for (GraphicElement element : graphicsAbsorber.getElements()) {
                if (rectangle.contains(element.getPosition(), false)) {
                    removedElements.add(element);
                }
            }
            page.getContents().suppressUpdate();
            page.deleteGraphics(removedElements);
            page.getContents().resumeUpdate();
        } finally {
            graphicsAbsorber.dispose();
        }
        document.save(outputFile.toString());
    }
    System.out.println("Vector graphics removed with method 2 in " + outputFile);
}

Copiar gráficos vectoriales a otro elemento de página, elemento por elemento

Utilice este ejemplo cuando cada elemento vectorial absorbido deba agregarse individualmente a una nueva página.

  1. Abra el PDF de origen Document y añada una página de destino.
  2. Visite la página de origen con GraphicsAbsorber.
  3. Agregue cada GraphicElement a la página de destino y guarde el documento.
public static void addToAnotherPageMethod1(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
        try {
            Page page1 = document.getPages().get_Item(1);
            Page page2 = document.getPages().add();
            graphicsAbsorber.visit(page1);
            page2.getContents().suppressUpdate();
            for (GraphicElement element : graphicsAbsorber.getElements()) {
                element.addOnPage(page2);
            }
            page2.getContents().resumeUpdate();
        } finally {
            graphicsAbsorber.dispose();
        }
        document.save(outputFile.toString());
    }
    System.out.println("Vector graphics copied with method 1 in " + outputFile);
}

Copiar gráficos vectoriales a otra página como una colección

Utilice este ejemplo cuando toda la colección de gráficos vectoriales absorbidos deba copiarse a una nueva página en una sola llamada.

  1. Abra el PDF de origen Document y añada una página de destino.
  2. Visite la página de origen con GraphicsAbsorber.
  3. Agregue la colección de gráficos absorbidos a la página de destino y guarde el documento.
public static void addToAnotherPageMethod2(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
        try {
            Page page1 = document.getPages().get_Item(1);
            Page page2 = document.getPages().add();
            graphicsAbsorber.visit(page1);
            page2.getContents().suppressUpdate();
            page2.addGraphics(graphicsAbsorber.getElements());
            page2.getContents().resumeUpdate();
        } finally {
            graphicsAbsorber.dispose();
        }
        document.save(outputFile.toString());
    }
    System.out.println("Vector graphics copied with method 2 in " + outputFile);
}