Trabalhar com gráficos vetoriais em Java
Aspose.PDF for Java expõe conteúdo vetorial através de objetos GraphicsAbsorber e GraphicElement. Isso permite que você inspecione elementos vetoriais de baixo nível em uma página e, então, os atualize, remova, copie ou exporte.
Inspecionar gráficos vetoriais em uma página
Use este exemplo quando precisar enumerar elementos de vetor e inspecionar a página, posição e contagem de operadores.
- Abra o PDF de origem em um objeto Document.
- Crie um GraphicsAbsorber e visite a página de destino.
- Itere sobre o absorvido objetos GraphicElement e exiba suas propriedades.
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 vetoriais na página
Use este exemplo quando todos os elementos vetoriais detectados precisarem ser deslocados para uma nova posição.
- Abra o PDF de origem em um objeto Document.
- Visite a página de destino com GraphicsAbsorber e suprimir temporariamente as atualizações.
- Altere a posição de cada elemento absorvido, retome as atualizações e salve o 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);
}
Remover gráficos vetoriais por posição com remoção de elemento
Use este exemplo quando os elementos vetoriais dentro de um retângulo específico devem ser excluídos um a um.
- Abra o PDF de origem em um objeto Document.
- Visite a página com GraphicsAbsorber e defina o alvo Rectangle.
- Remova os elementos correspondentes, retome as atualizações e salve o 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);
}
Remover gráficos vetoriais excluindo uma coleção
Use este exemplo quando os elementos vetoriais correspondentes devem ser coletados primeiro e, em seguida, removidos em uma única operação de página.
- Abra o PDF de origem em um objeto Document.
- Visite a página com GraphicsAbsorber e colete os elementos correspondentes.
- Exclua os gráficos coletados do conteúdo da página e salve o documento atualizado.
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 vetoriais para outro elemento da página elemento por elemento
Use este exemplo quando cada elemento vetorial absorvido deve ser adicionado individualmente a uma nova página.
- Abra o PDF de origem em um objeto Document e adicione uma página de destino.
- Visite a página de origem com GraphicsAbsorber.
- Adicione cada GraphicElement para a página de destino e salvar o 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 vetoriais para outra página como uma coleção
Use este exemplo quando toda a coleção de gráficos vetoriais absorvida deve ser copiada para uma nova página em uma única chamada.
- Abra o PDF de origem em um objeto Document e adicione uma página de destino.
- Visite a página de origem com GraphicsAbsorber.
- Adicione a coleção de gráficos absorvidos à página de destino e salve o 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);
}