在 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);
}