在 Java 中使用矢量图形
Contents
[
Hide
]
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);
}