Работа с векторной графикой в Java

Aspose.PDF for Java предоставляет векторный контент через объекты GraphicsAbsorber и GraphicElement. Это позволяет вам просматривать низкоуровневые векторные элементы на странице, а затем обновлять, удалять, копировать или экспортировать их.

Проверка векторной графики на странице

Используйте этот пример, когда вам нужно перечислить векторные элементы и проверить их страницу, позицию и количество операторов.

  1. Откройте исходный PDF в объекте Document.
  2. Создайте GraphicsAbsorber и посетите целевую страницу.
  3. Переберите поглощённые объекты GraphicElement и выведите их свойства.
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();
        }
    }
}

Перемещение векторной графики на странице

Используйте этот пример, когда все обнаруженные векторные элементы должны быть смещены в новое положение.

  1. Откройте исходный PDF в объекте Document.
  2. Посетите целевую страницу с GraphicsAbsorber и временно приостановите обновления.
  3. Измените позицию каждого поглощённого элемента, возобновите обновления и сохраните документ.
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);
}

Удаление векторной графики по позиции с удалением элемента

Используйте этот пример, когда векторные элементы внутри определённого прямоугольника нужно удалять по одному.

  1. Откройте исходный PDF в объекте Document.
  2. Обработайте страницу с помощью GraphicsAbsorber и определите нужную область Rectangle.
  3. Удалите соответствующие элементы, возобновите обновления и сохраните документ.
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);
}

Удаление коллекции векторных элементов

Используйте этот пример, когда векторные элементы, соответствующие условию, следует сначала собрать, а затем удалить в одной операции со страницей.

  1. Откройте исходный PDF в объекте Document.
  2. Посетите страницу с GraphicsAbsorber и соберите соответствующие элементы.
  3. Удалите собранную графику из содержимого страницы и сохраните обновлённый документ.
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);
}

Копирование векторной графики на другую страницу элемент за элементом

Используйте этот пример, когда каждый извлечённый векторный элемент должен быть добавлен по отдельности на новую страницу.

  1. Откройте исходный PDF в объекте Document и добавьте страницу назначения.
  2. Посетите исходную страницу с GraphicsAbsorber.
  3. Добавьте каждый GraphicElement на страницу назначения и сохраните документ.
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);
}

Копирование векторной графики на другую страницу в виде коллекции

Используйте этот пример, когда всю поглощённую коллекцию векторных элементов нужно скопировать на новую страницу за один вызов.

  1. Откройте исходный PDF в объекте Document и добавьте страницу назначения.
  2. Посетите исходную страницу с GraphicsAbsorber.
  3. Добавьте собранную графику в коллекцию на целевую страницу и сохраните документ.
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);
}