Работа с векторной графикой в Java
Aspose.PDF for Java предоставляет векторный контент через объекты GraphicsAbsorber и GraphicElement. Это позволяет вам просматривать низкоуровневые векторные элементы на странице, а затем обновлять, удалять, копировать или экспортировать их.
Проверка векторной графики на странице
Используйте этот пример, когда вам нужно перечислить векторные элементы и проверить их страницу, позицию и количество операторов.
- Откройте исходный PDF в объекте Document.
- Создайте GraphicsAbsorber и посетите целевую страницу.
- Переберите поглощённые объекты 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();
}
}
}
Перемещение векторной графики на странице
Используйте этот пример, когда все обнаруженные векторные элементы должны быть смещены в новое положение.
- Откройте исходный PDF в объекте Document.
- Посетите целевую страницу с GraphicsAbsorber и временно приостановите обновления.
- Измените позицию каждого поглощённого элемента, возобновите обновления и сохраните документ.
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);
}
Удаление векторной графики по позиции с удалением элемента
Используйте этот пример, когда векторные элементы внутри определённого прямоугольника нужно удалять по одному.
- Откройте исходный PDF в объекте Document.
- Обработайте страницу с помощью GraphicsAbsorber и определите нужную область Rectangle.
- Удалите соответствующие элементы, возобновите обновления и сохраните документ.
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);
}
Удаление коллекции векторных элементов
Используйте этот пример, когда векторные элементы, соответствующие условию, следует сначала собрать, а затем удалить в одной операции со страницей.
- Откройте исходный PDF в объекте Document.
- Посетите страницу с GraphicsAbsorber и соберите соответствующие элементы.
- Удалите собранную графику из содержимого страницы и сохраните обновлённый документ.
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);
}
Копирование векторной графики на другую страницу элемент за элементом
Используйте этот пример, когда каждый извлечённый векторный элемент должен быть добавлен по отдельности на новую страницу.
- Откройте исходный PDF в объекте Document и добавьте страницу назначения.
- Посетите исходную страницу с GraphicsAbsorber.
- Добавьте каждый 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);
}
Копирование векторной графики на другую страницу в виде коллекции
Используйте этот пример, когда всю поглощённую коллекцию векторных элементов нужно скопировать на новую страницу за один вызов.
- Откройте исходный PDF в объекте Document и добавьте страницу назначения.
- Посетите исходную страницу с GraphicsAbsorber.
- Добавьте собранную графику в коллекцию на целевую страницу и сохраните документ.
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);
}